ghost 4.19.1 → 4.20.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +9 -8
- package/Gruntfile.js +1 -1
- package/PRIVACY.md +3 -0
- package/content/adapters/README.md +2 -2
- package/core/boot.js +4 -4
- package/core/bridge.js +9 -1
- package/core/built/assets/{chunk.3.0778d8e4d707d2a625f1.js → chunk.3.777d43e2ce954ba8b2f5.js} +1 -1
- package/core/built/assets/codemirror/{codemirror-21a09582262987037db73b152fb35f7c.js → codemirror-d25c379b87ec8b33d54ac7149bc0b6ae.js} +14 -14
- package/core/built/assets/ghost-dark-20e2892d4f30d0d1183c9ac725ea37d0.css +1 -0
- package/core/built/assets/{ghost.min-102753ec485602c8fe80d60a1750bf84.js → ghost.min-07b6a50c54b3e2e190332c28c7255d2f.js} +525 -340
- package/core/built/assets/ghost.min-57e46fd3b1145ecf2cbd185a13611f3b.css +1 -0
- package/core/built/assets/icons/arrow-left-small.svg +0 -4
- package/core/built/assets/img/footer-marketplace-bg-572b6c6486a7e26316954d599eaa9f30.png +0 -0
- package/core/built/assets/img/marketing/offers-1-f2e1b653c4d5bb90eea9d7a2862530f9.jpg +0 -0
- package/core/built/assets/img/marketing/offers-2-28a225d34cc39d133748431536961d00.jpg +0 -0
- package/core/built/assets/img/marketing/offers-3-2094c91ab21a16c37fbe6ec16c140160.jpg +0 -0
- package/core/built/assets/img/themes/Casper-c7e784d7188cc5d7f097d9b6c97b0263.jpg +0 -0
- package/core/built/assets/simplemde/{simplemde-232f69d126310434489071a1891e6d8b.js → simplemde-3ffc0ec9e9fecf29b9a499db678c9e65.js} +14 -14
- package/core/built/assets/{vendor.min-0916203b598271a795909e8e0b1c16c2.js → vendor.min-af502ac4142871500fc424f6a5a254ec.js} +1046 -1043
- package/core/frontend/apps/amp/lib/router.js +1 -1
- package/core/frontend/meta/author-url.js +1 -1
- package/core/frontend/meta/url.js +1 -1
- package/core/{server → frontend}/public/favicon.ico +0 -0
- package/core/{server → frontend}/public/ghost.css +0 -0
- package/core/{server → frontend}/public/ghost.min.css +0 -0
- package/core/{server → frontend}/public/robots.txt +0 -0
- package/core/{server → frontend}/public/sitemap.xsl +0 -0
- package/core/frontend/services/proxy.js +1 -1
- package/core/frontend/services/routing/CollectionRouter.js +3 -49
- package/core/frontend/services/routing/ParentRouter.js +1 -4
- package/core/frontend/services/routing/StaticPagesRouter.js +3 -5
- package/core/frontend/services/routing/StaticRoutesRouter.js +4 -6
- package/core/frontend/services/routing/TaxonomyRouter.js +4 -5
- package/core/frontend/services/routing/controllers/collection.js +2 -2
- package/core/frontend/services/routing/controllers/email-post.js +2 -2
- package/core/frontend/services/routing/controllers/entry.js +2 -2
- package/core/frontend/services/routing/controllers/preview.js +2 -2
- package/core/frontend/services/routing/index.js +6 -12
- package/core/frontend/services/routing/registry.js +13 -0
- package/core/frontend/services/routing/router-manager.js +185 -0
- package/core/frontend/services/rss/generate-feed.js +2 -2
- package/core/frontend/services/theme-engine/i18n/i18n.js +267 -28
- package/core/frontend/services/theme-engine/i18n/index.js +1 -1
- package/core/frontend/services/theme-engine/i18n/theme-i18n.js +73 -0
- package/core/frontend/web/index.js +1 -0
- package/core/{server/web/site → frontend/web}/middleware/handle-image-sizes.js +4 -4
- package/core/{server/web/site → frontend/web}/middleware/index.js +0 -0
- package/core/{server/web/site → frontend/web}/middleware/redirect-ghost-to-admin.js +3 -3
- package/core/{server/web/site → frontend/web}/middleware/serve-favicon.js +6 -6
- package/core/{server/web/site → frontend/web}/middleware/serve-public-file.js +2 -2
- package/core/{server/web/site → frontend/web}/middleware/static-theme.js +3 -3
- package/core/{server/web/site → frontend/web}/routes.js +5 -4
- package/core/{server/web/site/app.js → frontend/web/site.js} +12 -16
- package/core/server/adapters/storage/LocalFileStorage.js +35 -39
- package/core/server/adapters/storage/index.js +12 -2
- package/core/server/api/canary/images.js +1 -1
- package/core/server/api/canary/offers.js +19 -0
- package/core/server/api/canary/utils/serializers/output/settings.js +2 -3
- package/core/server/api/canary/utils/serializers/output/utils/url.js +1 -1
- package/core/server/api/v2/images.js +1 -1
- package/core/server/api/v2/utils/serializers/output/utils/url.js +1 -1
- package/core/server/api/v3/images.js +1 -1
- package/core/server/api/v3/utils/serializers/output/settings.js +2 -3
- package/core/server/api/v3/utils/serializers/output/utils/url.js +1 -1
- package/core/server/data/importer/handlers/image.js +1 -1
- package/core/server/data/importer/importers/image.js +1 -1
- package/core/server/data/migrations/init/1-create-tables.js +7 -8
- package/core/server/data/migrations/init/2-create-fixtures.js +8 -8
- package/core/server/data/migrations/versions/4.20/01-remove-offer-redemptions-table.js +19 -0
- package/core/server/data/migrations/versions/4.20/02-remove-offers-table.js +30 -0
- package/core/server/data/migrations/versions/4.20/03-add-offers-table.js +21 -0
- package/core/server/data/migrations/versions/4.20/04-add-offer-redemptions-table.js +9 -0
- package/core/server/data/migrations/versions/4.20/05-remove-not-null-constraint-from-portal-title.js +41 -0
- package/core/server/data/schema/fixtures/utils.js +150 -143
- package/core/server/data/schema/schema.js +4 -3
- package/core/server/frontend/ghost.min.css +1 -0
- package/core/server/lib/image/image-size.js +2 -2
- package/core/server/lib/mobiledoc.js +3 -2
- package/core/server/models/action.js +7 -4
- package/core/server/models/base/plugins/overrides.js +19 -6
- package/core/server/models/index.js +4 -46
- package/core/server/models/member.js +5 -0
- package/core/server/models/user.js +2 -1
- package/core/server/overrides.js +6 -2
- package/core/server/services/adapter-manager/config.js +1 -0
- package/core/server/services/adapter-manager/index.js +9 -5
- package/core/server/services/adapter-manager/options-resolver.js +18 -0
- package/core/server/services/bulk-email/mailgun.js +1 -1
- package/core/server/services/mega/post-email-serializer.js +2 -2
- package/core/server/services/members/api.js +1 -3
- package/core/server/services/members/emails/signin.js +1 -1
- package/core/server/services/members/emails/signup.js +1 -1
- package/core/server/services/members/emails/subscribe.js +1 -1
- package/core/server/services/members/service.js +2 -1
- package/core/server/services/offers/service.js +1 -1
- package/core/server/services/route-settings/route-settings.js +1 -1
- package/core/server/services/settings/index.js +3 -1
- package/core/server/services/settings/settings-bread-service.js +42 -20
- package/core/server/services/slack.js +1 -1
- package/core/server/services/themes/activate.js +2 -2
- package/core/server/services/themes/activation-bridge.js +6 -6
- package/core/server/services/themes/storage.js +1 -1
- package/core/{frontend → server}/services/url/Queue.js +0 -0
- package/core/{frontend → server}/services/url/Resource.js +0 -0
- package/core/{frontend → server}/services/url/Resources.js +2 -2
- package/core/{frontend → server}/services/url/UrlGenerator.js +14 -14
- package/core/{frontend → server}/services/url/UrlService.js +12 -15
- package/core/{frontend → server}/services/url/Urls.js +1 -1
- package/core/{frontend → server}/services/url/configs/canary.js +0 -0
- package/core/{frontend → server}/services/url/configs/v2.js +0 -0
- package/core/{frontend → server}/services/url/configs/v3.js +0 -0
- package/core/{frontend → server}/services/url/configs/v4.js +0 -0
- package/core/{frontend → server}/services/url/index.js +0 -0
- package/core/server/services/xmlrpc.js +1 -1
- package/core/server/update-check.js +3 -3
- package/core/server/web/admin/controller.js +11 -0
- package/core/server/web/admin/views/default-prod.html +4 -4
- package/core/server/web/admin/views/default.html +4 -4
- package/core/server/web/api/app.js +8 -9
- package/core/server/web/oauth/app.js +4 -2
- package/core/server/web/parent/backend.js +3 -3
- package/core/server/web/parent/frontend.js +2 -2
- package/core/server/web/shared/middlewares/custom-redirects.js +0 -8
- package/core/server/web/shared/middlewares/maintenance.js +1 -1
- package/core/server/web/well-known.js +10 -10
- package/core/shared/config/overrides.json +1 -1
- package/core/shared/express.js +10 -0
- package/core/shared/html-to-plaintext.js +2 -2
- package/core/shared/labs.js +14 -5
- package/package.json +45 -43
- package/yarn.lock +649 -284
- package/core/built/assets/ghost-dark-da8e8eba130fb52f97494e51850d1045.css +0 -1
- package/core/built/assets/ghost.min-0d8f19623e9f077351bce453034daf4d.css +0 -1
- package/core/frontend/services/routing/bootstrap.js +0 -134
- package/core/server/public/404-ghost.png +0 -0
- package/core/server/public/404-ghost@2x.png +0 -0
- package/core/server/web/site/index.js +0 -1
- package/core/shared/i18n/i18n.js +0 -312
- package/core/shared/i18n/index.js +0 -6
package/.eslintrc.js
CHANGED
|
@@ -44,15 +44,15 @@ module.exports = {
|
|
|
44
44
|
files: 'core/frontend/**',
|
|
45
45
|
rules: {
|
|
46
46
|
'ghost/node/no-restricted-require': ['off', [
|
|
47
|
+
// If we make the frontend entirely independent, these have to be solved too
|
|
48
|
+
// {
|
|
49
|
+
// name: path.resolve(__dirname, 'core/shared/**'),
|
|
50
|
+
// message: 'Invalid require of core/shared from core/frontend.'
|
|
51
|
+
// },
|
|
47
52
|
// These are critical refactoring issues that we need to tackle ASAP
|
|
48
53
|
{
|
|
49
|
-
name: path.resolve(__dirname, 'core/server/**'),
|
|
54
|
+
name: [path.resolve(__dirname, 'core/server/**')],
|
|
50
55
|
message: 'Invalid require of core/server from core/frontend.'
|
|
51
|
-
},
|
|
52
|
-
// If we make the frontend entirely independent, these have to be solved too
|
|
53
|
-
{
|
|
54
|
-
name: path.resolve(__dirname, 'core/shared/**'),
|
|
55
|
-
message: 'Invalid require of core/shared from core/frontend.'
|
|
56
56
|
}
|
|
57
57
|
]]
|
|
58
58
|
}
|
|
@@ -60,9 +60,10 @@ module.exports = {
|
|
|
60
60
|
{
|
|
61
61
|
files: 'core/server/**',
|
|
62
62
|
rules: {
|
|
63
|
-
'ghost/node/no-restricted-require': ['
|
|
63
|
+
'ghost/node/no-restricted-require': ['warn', [
|
|
64
64
|
{
|
|
65
|
-
|
|
65
|
+
// Throw an error for all requires of the frontend, _except_ the url service which will be moved soon
|
|
66
|
+
name: [path.resolve(__dirname, 'core/frontend/**')],
|
|
66
67
|
message: 'Invalid require of core/frontend from core/server.'
|
|
67
68
|
}
|
|
68
69
|
]]
|
package/Gruntfile.js
CHANGED
package/PRIVACY.md
CHANGED
|
@@ -22,6 +22,9 @@ All of the information and code related to this service is available in the [upd
|
|
|
22
22
|
|
|
23
23
|
Ghost uses a number of third party services for specific functionality within Ghost.
|
|
24
24
|
|
|
25
|
+
### UNPKG
|
|
26
|
+
To easily load member functionality for membership features, Ghost leverages [UNPKG](https://unpkg.com) to provide a CDN for drop-in script known as Portal. If member signups are disabled, no CDN will be injected.
|
|
27
|
+
|
|
25
28
|
### Gravatar
|
|
26
29
|
|
|
27
30
|
To automatically populate your profile picture, Ghost pings [Gravatar](http://gravatar.com) to see if your email address is associated with a profile there. If it is, we pull in your profile picture. If not: nothing happens.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Content / Adapters
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
An adapter is a way to override a default
|
|
5
|
-
The default
|
|
4
|
+
An adapter is a way to override a default behavior in Ghost.
|
|
5
|
+
The default behavior in Ghost is as following:
|
|
6
6
|
|
|
7
7
|
### LocalFileStorage
|
|
8
8
|
By default Ghost will upload your images to the `content/images` folder.
|
package/core/boot.js
CHANGED
|
@@ -90,9 +90,9 @@ async function initCore({ghostServer, config}) {
|
|
|
90
90
|
await settings.syncEmailSettings(config.get('hostSettings:emailVerification:verified'));
|
|
91
91
|
debug('End: settings');
|
|
92
92
|
|
|
93
|
-
// The URLService is a core part of Ghost, which depends on models.
|
|
93
|
+
// The URLService is a core part of Ghost, which depends on models.
|
|
94
94
|
debug('Begin: Url Service');
|
|
95
|
-
const urlService = require('./
|
|
95
|
+
const urlService = require('./server/services/url');
|
|
96
96
|
// Note: there is no await here, we do not wait for the url service to finish
|
|
97
97
|
// We can return, but the site will remain in (the shared, not global) maintenance mode until this finishes
|
|
98
98
|
// This is managed on request: https://github.com/TryGhost/Ghost/blob/main/core/server/web/shared/middlewares/maintenance.js#L13
|
|
@@ -158,7 +158,7 @@ async function initExpressApps() {
|
|
|
158
158
|
|
|
159
159
|
/**
|
|
160
160
|
* Dynamic routing is generated from the routes.yaml file
|
|
161
|
-
* When Ghost's DB and core are loaded, we can access this file and call routing.
|
|
161
|
+
* When Ghost's DB and core are loaded, we can access this file and call routing.routingManager.start
|
|
162
162
|
* However this _must_ happen after the express Apps are loaded, hence why this is here and not in initFrontend
|
|
163
163
|
* Routing is currently tightly coupled between the frontend and backend
|
|
164
164
|
*/
|
|
@@ -173,7 +173,7 @@ async function initDynamicRouting() {
|
|
|
173
173
|
const routeSettings = await routeSettingsService.loadRouteSettings();
|
|
174
174
|
debug(`Frontend API Version: ${apiVersion}`);
|
|
175
175
|
|
|
176
|
-
routing.
|
|
176
|
+
routing.routerManager.start(apiVersion, routeSettings);
|
|
177
177
|
const getRoutesHash = () => routeSettingsService.api.getCurrentHash();
|
|
178
178
|
|
|
179
179
|
const settings = require('./server/services/settings');
|
package/core/bridge.js
CHANGED
|
@@ -16,6 +16,7 @@ const config = require('./shared/config');
|
|
|
16
16
|
const logging = require('@tryghost/logging');
|
|
17
17
|
const tpl = require('@tryghost/tpl');
|
|
18
18
|
const themeEngine = require('./frontend/services/theme-engine');
|
|
19
|
+
const routerManager = require('./frontend/services/routing').routerManager;
|
|
19
20
|
const settingsCache = require('./shared/settings-cache');
|
|
20
21
|
|
|
21
22
|
// Listen to settings.lang.edited, similar to the member service and models/base/listeners
|
|
@@ -35,6 +36,13 @@ class Bridge {
|
|
|
35
36
|
debug('Active theme init18n');
|
|
36
37
|
this.getActiveTheme().initI18n({locale: model.get('value')});
|
|
37
38
|
});
|
|
39
|
+
|
|
40
|
+
// NOTE: eventually this event should somehow be listened on and handled by the URL Service
|
|
41
|
+
// for now this eliminates the need for the frontend routing to listen to
|
|
42
|
+
// server events
|
|
43
|
+
events.on('settings.timezone.edited', (model) => {
|
|
44
|
+
routerManager.handleTimezoneEdit(model);
|
|
45
|
+
});
|
|
38
46
|
}
|
|
39
47
|
|
|
40
48
|
getActiveTheme() {
|
|
@@ -80,7 +88,7 @@ class Bridge {
|
|
|
80
88
|
reloadFrontend() {
|
|
81
89
|
const apiVersion = this.getFrontendApiVersion();
|
|
82
90
|
debug('reload frontend', apiVersion);
|
|
83
|
-
const siteApp = require('./
|
|
91
|
+
const siteApp = require('./frontend/web/site');
|
|
84
92
|
siteApp.reload({apiVersion});
|
|
85
93
|
}
|
|
86
94
|
}
|
package/core/built/assets/{chunk.3.0778d8e4d707d2a625f1.js → chunk.3.777d43e2ce954ba8b2f5.js}
RENAMED
|
@@ -190,4 +190,4 @@ var i=n(91),a=n(18),r=n(607),s=n(606)
|
|
|
190
190
|
function o(){Object(i.a)({callback:c,type:"error"}),Object(i.a)({callback:c,type:"unhandledrejection"})}function c(){var t=Object(s.c)()
|
|
191
191
|
t&&(a.a.log("[Tracing] Transaction: "+r.a.InternalError+" -> Global error occured"),t.setStatus(r.a.InternalError))}}}])
|
|
192
192
|
|
|
193
|
-
//# sourceMappingURL=chunk.3.
|
|
193
|
+
//# sourceMappingURL=chunk.3.777d43e2ce954ba8b2f5.map
|
|
@@ -317,7 +317,7 @@ return t.cache.hasOwnProperty(s)?o=t.cache[s]:(t.rect||(t.rect=t.view.text.getBo
|
|
|
317
317
|
if(!t.measure.heights||n&&t.measure.width!=i){var o=t.measure.heights=[]
|
|
318
318
|
if(n){t.measure.width=i
|
|
319
319
|
for(var a=t.text.firstChild.getClientRects(),l=0;l<a.length-1;l++){var s=a[l],u=a[l+1]
|
|
320
|
-
Math.abs(s.bottom-u.bottom)>2&&o.push((s.bottom+u.top)/2-r.top)}}o.push(r.bottom-r.top)}}(e,t.view,t.rect),t.hasHeights=!0),
|
|
320
|
+
Math.abs(s.bottom-u.bottom)>2&&o.push((s.bottom+u.top)/2-r.top)}}o.push(r.bottom-r.top)}}(e,t.view,t.rect),t.hasHeights=!0),o=function(e,t,r,n){var i,o=Hr(t.map,r,n),s=o.node,u=o.start,c=o.end,d=o.collapse
|
|
321
321
|
if(3==s.nodeType){for(var f=0;f<4;f++){for(;u&&ne(t.line.text.charAt(o.coverStart+u));)--u
|
|
322
322
|
for(;o.coverStart+c<o.coverEnd&&ne(t.line.text.charAt(o.coverStart+c));)++c
|
|
323
323
|
if((i=a&&l<9&&0==u&&c==o.coverEnd-o.coverStart?s.parentNode.getBoundingClientRect():Ir(L(s,u,c).getClientRects(),n)).left||i.right||0==u)break
|
|
@@ -328,7 +328,7 @@ var r=screen.logicalXDPI/screen.deviceXDPI,n=screen.logicalYDPI/screen.deviceYDP
|
|
|
328
328
|
return{left:t.left*r,right:t.right*r,top:t.top*n,bottom:t.bottom*n}}(e.display.measure,i))}else{var h
|
|
329
329
|
u>0&&(d=n="right"),i=e.options.lineWrapping&&(h=s.getClientRects()).length>1?h["right"==n?h.length-1:0]:s.getBoundingClientRect()}if(a&&l<9&&!u&&(!i||!i.left&&!i.right)){var p=s.parentNode.getClientRects()[0]
|
|
330
330
|
i=p?{left:p.left,right:p.left+nn(e.display),top:p.top,bottom:p.bottom}:Pr}for(var g=i.top-t.rect.top,m=i.bottom-t.rect.top,v=(g+m)/2,y=t.view.measure.heights,b=0;b<y.length-1&&!(v<y[b]);b++);var w=b?y[b-1]:0,x=y[b],k={left:("right"==d?i.right:i.left)-t.rect.left,right:("left"==d?i.left:i.right)-t.rect.left,top:w,bottom:x}
|
|
331
|
-
return i.left||i.right||(k.bogus=!0),e.options.singleCursorHeightPerLine||(k.rtop=g,k.rbottom=m),k}(e,t,r,n)
|
|
331
|
+
return i.left||i.right||(k.bogus=!0),e.options.singleCursorHeightPerLine||(k.rtop=g,k.rbottom=m),k}(e,t,r,n),o.bogus||(t.cache[s]=o)),{left:o.left,right:o.right,top:i?o.rtop:o.top,bottom:i?o.rbottom:o.bottom}}var zr,Pr={left:0,right:0,top:0,bottom:0}
|
|
332
332
|
function Hr(e,t,r){for(var n,i,o,a,l,s,u=0;u<e.length;u+=3)if(l=e[u],s=e[u+1],t<l?(i=0,o=1,a="left"):t<s?o=1+(i=t-l):(u==e.length-3||t==s&&e[u+3]>t)&&(i=(o=s-l)-1,t>=s&&(a="right")),null!=i){if(n=e[u+2],l==s&&r==(n.insertLeft?"left":"right")&&(a=r),"left"==r&&0==i)for(;u&&e[u-2]==e[u-3]&&e[u-1].insertLeft;)n=e[2+(u-=3)],a="left"
|
|
333
333
|
if("right"==r&&i==s-l)for(;u<e.length-3&&e[u+3]==e[u+4]&&!e[u+5].insertLeft;)n=e[(u+=3)+2],a="right"
|
|
334
334
|
break}return{node:n,start:i,end:o,collapse:a,coverStart:l,coverEnd:s}}function Ir(e,t){var r=Pr
|
|
@@ -503,15 +503,15 @@ e.updatedDisplay&&Tn(t),e.barMeasure=Fn(t),r.maxLineChanged&&!t.options.lineWrap
|
|
|
503
503
|
null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft<t.doc.scrollLeft&&En(t,Math.min(t.display.scroller.scrollLeft,e.maxScrollLeft),!0),t.display.maxLineChanged=!1)
|
|
504
504
|
var r=e.focus&&e.focus==D()
|
|
505
505
|
e.preparedSelection&&t.display.input.showSelection(e.preparedSelection,r),(e.updatedDisplay||e.startHeight!=t.doc.height)&&jn(t,e.barMeasure),e.updatedDisplay&&ci(t,e.barMeasure),e.selectionChanged&&xn(t),t.state.focused&&e.updateInput&&t.display.input.reset(e.typing),r&&kn(e.cm)}function Qn(e){var t=e.cm,r=t.display,n=t.doc
|
|
506
|
-
e.updatedDisplay&&li(t,e.update),null==r.wheelStartX||null==e.scrollTop&&null==e.scrollLeft&&!e.scrollToPos||(r.wheelStartX=r.wheelStartY=null),null!=e.scrollTop&&In(t,e.scrollTop,e.forceScroll),null!=e.scrollLeft&&En(t,e.scrollLeft,!0,!0),e.scrollToPos
|
|
507
|
-
if(t.top+n.top<0?i=!0:t.bottom+n.top>(window.innerHeight||document.documentElement.clientHeight)&&(i=!1),null!=i&&!p){var o=A("div","",null,"position: absolute;\n top: "+(t.top-r.viewOffset-kr(e.display))+"px;\n height: "+(t.bottom-t.top+Lr(e)+r.barHeight)+"px;\n left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;")
|
|
508
|
-
e.display.lineSpace.appendChild(o),o.scrollIntoView(i),e.display.lineSpace.removeChild(o)}}}(t,function(e,t,r,n){var i
|
|
506
|
+
if(e.updatedDisplay&&li(t,e.update),null==r.wheelStartX||null==e.scrollTop&&null==e.scrollLeft&&!e.scrollToPos||(r.wheelStartX=r.wheelStartY=null),null!=e.scrollTop&&In(t,e.scrollTop,e.forceScroll),null!=e.scrollLeft&&En(t,e.scrollLeft,!0,!0),e.scrollToPos){var i=function(e,t,r,n){var i
|
|
509
507
|
null==n&&(n=0),e.options.lineWrapping||t!=r||(r="before"==(t=t.ch?et(t.line,"before"==t.sticky?t.ch-1:t.ch,"after"):t).sticky?et(t.line,t.ch+1,"before"):t)
|
|
510
508
|
for(var o=0;o<5;o++){var a=!1,l=qr(e,t),s=r&&r!=t?qr(e,r):l,u=An(e,i={left:Math.min(l.left,s.left),top:Math.min(l.top,s.top)-n,right:Math.max(l.left,s.left),bottom:Math.max(l.bottom,s.bottom)+n}),c=e.doc.scrollTop,d=e.doc.scrollLeft
|
|
511
|
-
if(null!=u.scrollTop&&(Hn(e,u.scrollTop),Math.abs(e.doc.scrollTop-c)>1&&(a=!0)),null!=u.scrollLeft&&(En(e,u.scrollLeft),Math.abs(e.doc.scrollLeft-d)>1&&(a=!0)),!a)break}return i}(t,lt(n,e.scrollToPos.from),lt(n,e.scrollToPos.to),e.scrollToPos.margin)
|
|
512
|
-
var
|
|
513
|
-
if(i)
|
|
514
|
-
|
|
509
|
+
if(null!=u.scrollTop&&(Hn(e,u.scrollTop),Math.abs(e.doc.scrollTop-c)>1&&(a=!0)),null!=u.scrollLeft&&(En(e,u.scrollLeft),Math.abs(e.doc.scrollLeft-d)>1&&(a=!0)),!a)break}return i}(t,lt(n,e.scrollToPos.from),lt(n,e.scrollToPos.to),e.scrollToPos.margin)
|
|
510
|
+
!function(e,t){if(!ge(e,"scrollCursorIntoView")){var r=e.display,n=r.sizer.getBoundingClientRect(),i=null
|
|
511
|
+
if(t.top+n.top<0?i=!0:t.bottom+n.top>(window.innerHeight||document.documentElement.clientHeight)&&(i=!1),null!=i&&!p){var o=A("div","",null,"position: absolute;\n top: "+(t.top-r.viewOffset-kr(e.display))+"px;\n height: "+(t.bottom-t.top+Lr(e)+r.barHeight)+"px;\n left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;")
|
|
512
|
+
e.display.lineSpace.appendChild(o),o.scrollIntoView(i),e.display.lineSpace.removeChild(o)}}}(t,i)}var o=e.maybeHiddenMarkers,a=e.maybeUnhiddenMarkers
|
|
513
|
+
if(o)for(var l=0;l<o.length;++l)o[l].lines.length||pe(o[l],"hide")
|
|
514
|
+
if(a)for(var s=0;s<a.length;++s)a[s].lines.length&&pe(a[s],"unhide")
|
|
515
515
|
r.wrapper.offsetHeight&&(n.scrollTop=t.display.scroller.scrollTop),e.changeObjs&&pe(t,"changes",t,e.changeObjs),e.update&&e.update.finish()}function Jn(e,t){if(e.curOp)return t()
|
|
516
516
|
qn(e)
|
|
517
517
|
try{return t()}finally{_n(e)}}function ei(e,t){return function(){if(e.curOp)return t.apply(e,arguments)
|
|
@@ -1057,7 +1057,7 @@ a&&lr(e,"electricInput",e,i.head.line)}}}function Da(e){for(var t=[],r=[],n=0;n<
|
|
|
1057
1057
|
r.push(o),t.push(e.getRange(o.anchor,o.head))}return{text:t,ranges:r}}function za(e,t,r,n){e.setAttribute("autocorrect",r?"":"off"),e.setAttribute("autocapitalize",n?"":"off"),e.setAttribute("spellcheck",!!t)}function Pa(){var e=A("textarea",null,null,"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none"),t=A("div",[e],null,"overflow: hidden; position: relative; width: 3px; height: 0px;")
|
|
1058
1058
|
return s?e.style.width="1000px":e.setAttribute("wrap","off"),g&&(e.style.border="1px solid black"),za(e),t}function Ha(e,t,r,n,i){var o=t,a=r,l=qe(e,t.line)
|
|
1059
1059
|
function s(n){var o,a
|
|
1060
|
-
if(
|
|
1060
|
+
if(o=i?function(e,t,r,n){var i=ue(t,e.doc.direction)
|
|
1061
1061
|
if(!i)return Zo(t,r,n)
|
|
1062
1062
|
r.ch>=t.text.length?(r.ch=t.text.length,r.sticky="before"):r.ch<=0&&(r.ch=0,r.sticky="after")
|
|
1063
1063
|
var o=le(i,r.ch,r.sticky),a=i[o]
|
|
@@ -1070,7 +1070,7 @@ if(a.from<=u&&u<a.to)return o(u,l)
|
|
|
1070
1070
|
if(u=l?a.from:s(a.to,-1),n.begin<=u&&u<n.end)return o(u,l)}},g=p(o+n,n,c)
|
|
1071
1071
|
if(g)return g
|
|
1072
1072
|
var m=n>0?c.end:s(c.begin,-1)
|
|
1073
|
-
return null==m||n>0&&m==t.text.length||!(g=p(n>0?0:i.length-1,n,u(m)))?null:g}(e.cm,l,t,r):Zo(l,t,r))
|
|
1073
|
+
return null==m||n>0&&m==t.text.length||!(g=p(n>0?0:i.length-1,n,u(m)))?null:g}(e.cm,l,t,r):Zo(l,t,r),null==o){if(n||(a=t.line+r)<e.first||a>=e.first+e.size||(t=new et(a,t.ch,t.sticky),!(l=qe(e,a))))return!1
|
|
1074
1074
|
t=Qo(i,e.cm,l,t.line,r)}else t=o
|
|
1075
1075
|
return!0}if("char"==n)s()
|
|
1076
1076
|
else if("column"==n)s(!0)
|
|
@@ -1409,8 +1409,8 @@ if(">"==i||"/"==i&&e.eat(">"))return t.tokenize=d,o=">"==i?"endTag":"selfcloseTa
|
|
|
1409
1409
|
if("="==i)return o="equals",null
|
|
1410
1410
|
if("<"==i){t.tokenize=d,t.state=y,t.tagName=t.tagStart=null
|
|
1411
1411
|
var a=t.tokenize(e,t)
|
|
1412
|
-
return a?a+" tag error":"tag error"}return/[\'\"]/.test(i)?(t.tokenize=(r=i,
|
|
1413
|
-
break}return"string"}
|
|
1412
|
+
return a?a+" tag error":"tag error"}return/[\'\"]/.test(i)?(t.tokenize=(r=i,n=function(e,t){for(;!e.eol();)if(e.next()==r){t.tokenize=f
|
|
1413
|
+
break}return"string"},n.isInAttribute=!0,n),t.stringStartCol=e.column(),t.tokenize(e,t)):(e.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function h(e,t){return function(r,n){for(;!r.eol();){if(r.match(t)){n.tokenize=d
|
|
1414
1414
|
break}r.next()}return e}}function p(e){return function(t,r){for(var n;null!=(n=t.next());){if("<"==n)return r.tokenize=p(e+1),r.tokenize(t,r)
|
|
1415
1415
|
if(">"==n){if(1==e){r.tokenize=d
|
|
1416
1416
|
break}return r.tokenize=p(e-1),r.tokenize(t,r)}}return"meta"}}function g(e,t,r){this.prev=e.context,this.tagName=t,this.indent=e.indented,this.startOfLine=r,(s.doNotIndent.hasOwnProperty(t)||e.context&&e.context.noIndent)&&(this.noIndent=!0)}function m(e){e.context&&(e.context=e.context.prev)}function v(e,t){for(var r;;){if(!e.context)return
|
|
@@ -1436,4 +1436,4 @@ if(!a||!a.hasOwnProperty(o[2]))break
|
|
|
1436
1436
|
i=i.prev}for(;i&&i.prev&&!i.startOfLine;)i=i.prev
|
|
1437
1437
|
return i?i.indent+l:t.baseIndent||0},electricInput:/<\/[\s\w:]+>$/,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",configuration:s.htmlMode?"html":"xml",helperType:s.htmlMode?"html":"xml",skipAttribute:function(e){e.state==L&&(e.state=C)}}})),e.defineMIME("text/xml","xml"),e.defineMIME("application/xml","xml"),e.mimeModes.hasOwnProperty("text/html")||e.defineMIME("text/html",{name:"xml",htmlMode:!0})}))
|
|
1438
1438
|
|
|
1439
|
-
//# sourceMappingURL=codemirror-
|
|
1439
|
+
//# sourceMappingURL=codemirror-d25c379b87ec8b33d54ac7149bc0b6ae.map
|