Giter VIP home page Giter VIP logo

tryghost / ghost Goto Github PK

View Code? Open in Web Editor NEW
45.6K 1.0K 9.9K 266.33 MB

Independent technology for modern publishing, memberships, subscriptions and newsletters.

Home Page: https://ghost.org

License: MIT License

JavaScript 72.72% HTML 1.18% XSLT 0.04% CSS 6.53% Handlebars 6.33% TypeScript 13.12% MDX 0.06% Nix 0.01%
journalism publishing blogging javascript web-application cms nodejs ghost headless-cms jamstack creator-economy hacktoberfest

ghost's Introduction

 

Ghost Ghost

 

Ghost.orgForumDocsContributingTwitter

Downloads Latest release Build status Contributors

 

Fiercely independent, professional publishing. Ghost is the most popular open source, headless Node.js CMS which already works with all the tools you know and love.

 

Ghost(Pro) Ghost(Pro)

The easiest way to get a production instance deployed is with our official Ghost(Pro) managed service. It takes about 2 minutes to launch a new site with worldwide CDN, backups, security and maintenance all done for you.

For most people this ends up being the best value option because of how much time it saves — and 100% of revenue goes to the Ghost Foundation; funding the maintenance and further development of the project itself. So you’ll be supporting open source software and getting a great service!

 

Quickstart install

If you want to run your own instance of Ghost, in most cases the best way is to use our CLI tool

npm install ghost-cli -g

 

Then, if installing locally add the local flag to get up and running in under a minute - Local install docs

ghost install local

 

or on a server run the full install, including automatic SSL setup using LetsEncrypt - Production install docs

ghost install

 

Check out our official documentation for more information about our recommended hosting stack & properly upgrading Ghost, plus everything you need to develop your own Ghost themes or work with our API.

Contributors & advanced developers

For anyone wishing to contribute to Ghost or to hack/customize core files we recommend following our full development setup guides: Contributor guideDeveloper setup

 

Ghost sponsors

We'd like to extend big thanks to our sponsors and partners who make Ghost possible. If you're interested in sponsoring Ghost and supporting the project, please check out our profile on GitHub sponsors ❤️

DigitalOceanFastly

 

Getting help

You can find answers to a huge variety of questions, along with a large community of helpful developers over on the Ghost forum - replies are generally very quick. Ghost(Pro) customers also have access to 24/7 email support.

To stay up to date with all the latest news and product updates, make sure you subscribe to our blog — or you can always follow us on Twitter, if you prefer your updates bite-sized and facetious. 🎷🐢

 

Copyright & license

Copyright (c) 2013-2023 Ghost Foundation - Released under the MIT license. Ghost and the Ghost Logo are trademarks of Ghost Foundation Ltd. Please see our trademark policy for info on acceptable usage.

ghost's People

Contributors

acburdine avatar aileen avatar allouis avatar binary-koan avatar cobbspur avatar daniellockyer avatar djordjevlais avatar erisds avatar github-actions[bot] avatar greenkeeperio-bot avatar halfdan avatar jaswilli avatar johnonolan avatar kevinansfield avatar kirrg001 avatar matthojo avatar moreofmorris avatar naz avatar novaugust avatar pauladamdavis avatar peterzimon avatar renovate-bot avatar renovate[bot] avatar rishabhgrg avatar ronaldlangeveld avatar sam-lord avatar sanne-san avatar sebgie avatar simonbackx avatar tpatel avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ghost's Issues

@Font-face in firefox fucking itself

I've been over this for 2.5 hours, I can't find anything wrong with my implementation that's making Firefox not display my icon font :(

Any chance it could be node's headers preventing (or not explicitly allowing) firefox to access the appropriate file types? (See ref)

Image Upload: Save in post - haunted markdown

Once an image is successfully uploaded as per issue #40, the markdown in the Code Mirror editor needs to be updated so that the relative URL of the image is inserted into the parentheses which appear after:

!image[]

So it should look something like:

!image[](/content/images/2013/05/my-image.png)

This must not break the code mirror editor.

Keyboard Shortcuts

The Ghost editor should have a number of keyboard shortcuts to assist with writing tasks.

A good example of how this works can be seen in the Mou app, under the Actions menu. We need to research, when applying this to a browser based app: What are the keyboard shortcuts available to us that won't cause major conflicts with OS+browser native shortcuts? See also: List of common shortcuts - wikipedia

Proposed shortcuts:

  • Zen Writing (fullscreen) Mode (Currently: Ctrl+Shift+Z)
    • TODO: Toggle off when shortcut is repeated
    • TODO: Toggle off when escape key is pressed
  • Text formatting shortcuts (see Mou)
  • Publishing action shortcuts (to change values of the publish button)

Users API, data model & provider

Extend the api and provider to provide a full BREAD/CRUD api for Users

Use the existing data model for now, other issues will be created for improving / adding to the model

There is currently no UI for this, therefore I recommend we use this as an opportunity to start a test suite using BDD with Mocha.

Admin views - cleanup

The default.hbs layout should declare blocks for styles and scripts.

All other layouts should use these blocks to add their scripts/styles to the page.

The main tag should be moved to the default layout and out of all other views.

Flashes should be included directly after the main tag in the default view

Convert indent to 4 spaces

Remove the Func Wrapper from node, whilst keeping strong linting

  • Node/Server side code should not have a function wrapper or use strict statement
  • Client code should retain the function wrapper and use strict statement
  • Both client & server should conform to the same whitespace style & code standards
  • Both client & server should be fully linted / validated

Build Dashboard Widget UI

I'm placing this here as a reference to the dashboard UI stuff.
This doesn't cover the actual functionality of all of them, just the UI conversion.

Replace Compass dependency with Bourbon

Compass is a big, hulking bitch of a SASS library. I moved TryGhost.org from Compass to Bourbon just prior to the Kickstarter campaign launching and was very impressed with it. Much more light-weight, up-to-date, better documented, and generally nicer to work with.

Compass is excessive for Ghost's needs, so let's convert the main codebase to Bourbon.

Image upload interaction design

Please provide designs for how image upload & import interactions should look including progress & failure for each of the ways of inserting an image.

Reimplement posts model with bookshelfjs

On a branch, reimplement the existing (completely unfinished but will do for now) data model for posts using bookshelfjs.

Duplicate the data provider to provide access and re-wire the existing controllers to use the new data provider.

I realise there will be some fun here will callbacks vs promises. Ultimately promises is what we want, but I would advise just working around this as best as possible for now.

This is intended as a relatively small exploratory task to inform a final decision with regards to switching over.

Dashboard Viewing Modes

Main ticket for this - just creating it cause I had a random passing thought (whilst peeing, if you must know) about the whole masonry/dragdrop/resonsive thing.

What if there were two modes:

Viewing - responsive masonry

Editing - all elements become the same size, and can be re-ordered

I don't know if this actually makes sense. Just thought it was worth writing down in case.

Adding Tags to a Post

  • commas are now getting included in tags
  • suggestion/typeahead menu should close when a tag is deleted
    • this currently works when deleting tags by pressing [backspace], but breaks when deleting tags by clicking on them
  • suggestion menu should always be limited to 5 items
  • when populating a tag by selecting suggestion and pressing [enter] - suggestion menu should close

handlebars helpers are bombing out

Yesterday I deleted the npm-shrinkwrap file which stabilised all of the versions of various packages, because it was out of date and I figured it wasn't really necessary.

However, today I've realised that the handlebars helpers are dying with errors like

:\Ghost\Ghost\core\frontend\helpers\index.js:19
            return moment(context).format(f);
                                   ^
TypeError: Cannot call method 'format' of null

On the homepage.

And a similar one on the editor page.

I've tried fixing the version of express-hbs back to 0.1.3-pre and that seems to fix the issue for now, but that doesn't seem to be a good solution to me! I'm out of time for debugging this today, but hopefully someone else may have time. Perhaps @jgable may be able to figure it out as he has contributed to the express-hbs package.

Editor screen: Advanced scroll features

On the editor screen, the two panels should scroll in sync.

Currently, scrolling the edit panel causes the preview panel to scroll at the same speed. However scrolling the preview panel does not scroll the edit panel.

Also, the preview panel scrolls the same amount, or to the same position as the edit panel. This appears to work well at first, but the content in the preview panel takes up different amounts of space, and in longer posts with lots of titles and code blocks the two panels quickly become out of sync visually.

A simple(ish) fix for this problem would be to scroll the two panels by the same percentage, rather than by the same distance. This should keep them more in sync, and at the very least they would both reach the end together.

A more complex fix would be to try to keep headings and other blocks aligned. Without investigating further the APIs provided by CodeMirror and showdown I'm not sure if or how this would be possible.

Therefore, for now, this story consists of:

  • refactor the existing scroll syncing code to be a module/jQuery plugin
  • debounce events to improve performance
  • ensure that scrolling classes are added at the correct time
  • make the edit panel scroll when the preview panel is scrolled
  • change the syncing between panels to work on % of total height scrolled

Image Upload: Upload in editor panel

Requires: Issue #280: Image Upload: Reusable tool for uploads

The image upload drop zone which appears in the preview panel should allow the user to upload images.

See the wiki for the user story.

  • If the user drops an image on the drop zone then that image should be uploaded.
  • An image should be any file with a .gif, .jpg or .png extension.
  • If the user clicks anywhere in the drop zone except for the two icons, then a file dialog should be shown. Any file selected should also be uploaded as described. Note: This behaviour may have to downgrade in some browsers.
  • Images should be uploaded to the /content/images directory. Images should be organised into year & month directories as in WordPress.
  • While the image is uploading, the progress and any errors should be displayed as defined by issue #38.
  • Once the image is uploaded, it should replace the entirety of the image upload drop zone.

Admin login page

We need to convert the existing basic auth solution to be proper secure login, with a nice login screen.

The design & markup for the login screen is already done in core/test/html/login.html

For this task:

  • Setup a new route for the login page
  • Create a new view for the login page, using the existing HTML
  • Change the existing auth method to redirect to the login page, if the user is not logged in
  • Continue to use a hard-coded username and password, and verify these (plaintext) from submitting the login form.
  • Keep track of the login so we don't redirect next time

Admin Redirects

All of the below should take the user to /ghost/ admin panel:

  • /ghost/
  • /ghost-admin/
  • /admin/
  • /login/
  • /dashboard/
  • /wp-admin/ ;)

Admin navbar routes cleanup

  • Switch the path and all references to "blog" to be "content"
  • Squish name and defaultString into one
  • Ensure routes end with slashes

Eventually this should be extended to include a left and right nav bar, and should probably also feature a filter hook for plugins to add to or change the menu.

Optimise translation / i18n for default language

Strings marked for translation include the default string, which means there should be no requirement to load a set of translations and do a lookup.

Ensure that this optimisation is made in a smart way.

i18n for the frontend

Themes / apps should be able to provide their own language json files in their own lang folder. Ghost should be able to detect and load these.

Posts browse API call: handle pagination

Extend the browse posts API call to provide functionality for pagination

  • should accept options which dictate which posts to return (i.e. offset and limit)
  • returned data should provide the information needed to build a pagination ui (total results, current page etc)

Internal / public API example

Ghost is intended to use an internal JSON API which we can also expose publicly.

  • Create an API object which has the usual BREAD/CRUD operations for posts
  • Convert all routes and functions which use direct access to the data providers for Posts to go via the API
  • It should be possible to use the same API object via a route / HTTP request or in any other function - therefore the api should not rely on request/responses but msutbe able to handle them

Mobile Interaction JS Library

Putting this out there early, before we come to implementing this - but we need a very solid Javascript (jQuery I guess?) library to handle iOS style mobile interactions.

The one that I've seen used most often is http://jqtjs.com/ (formerly known as jQTouch) - however it's definitely not the smoothest. I mentioned in another ticket that I've seen another one similar to this recently which performed a lot better, but unfortunately I can't remember what it was called (it might have been http://maker.github.com/ratchet/). Other ones discussed include:

Flashes / notifications in Backbone

Now that we have Backbone in place across most of the admin app, we need to add in notifications. Currently, most operations do an alert.

Dynamic notifications should always exist at the same location in the DOM as the static ones (where the {{>flashes}} partial is included in default.hbs.

The dynamic notifications should also have/work with #142

Logout

The logout button in the user menu of the admin navbar should send a user to /logout/ which already performs a logout

User login / authentication

We need to convert the existing basic auth solution to be proper secure login, with a nice login screen.

Depends (sort of) on #26 being done first. As well as some updates to the data model etc

For this task:

  • Upgrade the auth function to use an email address and (salted & hashed) password from the user table in SQLite.

Theme/Plugin API: Static menu for frontend

Ghost themes will likely need a menu.
For the time being, this should be static JSON output with two links: home and archives.

  • Create a function which returns the static JSON for the menu
  • Wrap the output function in a filter so that themes / plugins can add and remove items.
  • The menu data should automatically be made available to every frontend view.
  • Create a core handlebars helper which generates semantic HTML for the menu

See the WordPress version of Casper for an example menu: http://john.onolan.org

Settings (Desktop/Mobile/Everything)

User story for settings management. This is the main screen - http://cl.ly/O6v7

  • User arrives on settings screen
  • By default the first item in the list is selected
    • Use history API to remember the last sub-section the user was on and return to it?
  • The settings relevant to the currently-active menu item are on the right
  • The user can update the settings, and save them with the save button, top-right
    • Do we need a save button?
  • Clicking on menu items on the left dynamically loads in the settings for other areas

Tablet workflow: Exactly the same, but smaller columns http://cl.ly/O6sC

Mobile workflow: Split into 2 pages, like other screens detailed http://cl.ly/O7TY

Delete post

On the content screen, selecting a post and then going into the settings menu (cog in top right) and pressing delete should delete the post.

A notification should show success or failure of this action.

It is expected that this be done with a page refresh for now.

Image upload "haunted" markdown

The image upload drop zone should appear in the preview window when the user types:


!image[]

Note that there should be a newline before. It should also match:

!image[Some text here]

And the inclusion of parenthesis at the end:

!image[]()

If the parenthesis include a URL, that URL should be used as the image in the preview instead of showing an image upload drop zone.

If text is typed into the square brackets, it should appear after the text "add image of..."

The image upload dropzone should appear on it's own line, and should not interfere with items either side of it.

Write post (mobile)

When viewport is "tablet" resolution or smaller, the write/preview panels are combined and can be alternated between via tabs. See http://cl.ly/Nxwo
When viewport is "mobile" resolution or smaller, the design gets smaller again - see http://cl.ly/NyNw - functionality remains the same. The only other change is that menus (tags, post settings) now become full screen iOS style menus, something like http://jqtjs.com/ (but I saw a newer thing like this the other day that was way smoother)

Settings API, data model & provider

Extend the existing api & provider for settings. Settings should only have browse, read and update functions. It should not possible for the moment to add or delete a setting.

Use the existing data model for now, other issues will be created for improving / adding to the model

Users: Exploring email sending

Sending emails is fairly important. (see Ghost skypechat on 23rd May, at about 9:27 am UK time). I'd like to pick your brains on it especially with regards to the following questions:

  • should Ghost be able to send emails from the server it's installed on? This is for the self-hosted installs mainly. (because IP blacklisting, misconfigured MX records, spam, throughput, etc)
  • should Ghost use some sort of outside smtp server? (google eg.)
  • would that be a required setup step?
  • have I forgotten anything important?

Discuss! :)

npm install misses node-polyglot

This one is baffling me so I thought I'd put it out to the team to see if anyone else has an idea what's going on.

When running:
npm install

On a fresh clone of the repo, node-polyglot is not installed. It isn't listed in the get requests and it doesn't seem to error either.

I have seen this happen on my machine, which I can easily fix by running npm install node-polyglot. However this is also affecting the travis-ci build that I've been trying to setup.

Any ideas or suggestions are welcome!

Adding Tags to a Post

  • commas are now getting included in tags
  • suggestion/typeahead menu should close when a tag is deleted
    • this currently works when deleting tags by pressing [backspace], but breaks when deleting tags by clicking on them
  • suggestion menu should always be limited to 5 items
  • when populating a tag by selecting suggestion and pressing [enter] - suggestion menu should close

Use backbone for admin front-end

jQuery potions and hand-crafted XHR requests are piling up. Data is being printed in templates, fetched by javascript and thrown around.

The admin should be migrated to an architecture using Backbone for data management and sync/API calls, mirroring the server model hierarchy as much as possible. blogs and settings pages are a good place to start.

The goal should be to make way for the transition to an interface fully rendered in the client side. Benefits would be faster page loads/navigation, no page reloads, no rebuilding js state for each page, simpler data management/lifecycle; it also becomes portable to hybrid desktop/mobile apps using PhoneGap/Trigger/AppJs/etc with very little work.

Just wanted to open this for discussion.

Load i18n files using promises, not callbacks

  • all i18n files, for admin, themes and plugins, should be loaded using promises not callbacks.

Interesting questions:

  • should the admin i18n be in a json file, or should it be in the database?
  • how can we make it easy for developers to create these files for their themes / plugins?

Remove CodeMirror Stylesheet

The codemirror default stylesheet is an unnecessary http call, let's slaughter the bitch and merge the necessary styles into the core css.

i18n for admin views

There are already several views/templates for the admin system which need to have all strings marked up for translation.

  • Clean up the existing lang json files to remove unused strings as the admin has changed since this was done
  • Go through the existing admin views and replace all strings with i18n tags as per the documentation on the wiki

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.