Spring RestController/Angular nie odczytuje z http scope

Spring RestController/Angular nie odczytuje z http scope
P2
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 4 lata
  • Postów:47
0

Controller

Kopiuj
java

package com.martin;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.*;

import java.util.List;



@Component
@RestController
@RequestMapping("employee")
public class EmployeeController {

    public final EmployeeRepository employeeRepository;

    @SuppressWarnings("SpringJavaAutowiringInspection")
    @Autowired
    public EmployeeController(EmployeeRepository employeeRepository) {
        this.employeeRepository = employeeRepository;
    }


    @GetMapping
    public Iterable<Employeer> getTalks() {
        return employeeRepository.findAll();

    }
}
 

Plik html z angularem

Kopiuj
html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>ziom</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<body>

<div ng-app="myApp" ng-controller="people">
    <table>
        <tr ng-repeat="x in names">
            <td>{{ x.firstName }}</td>
            <td>{{x.salary}}</td>


        </tr>
    </table>

</div>

<script>
    var app = angular.module('myApp', []);



    app.controller('people', function($scope, $http) {
        $http.get('http://localhost:8080/employee/')
                .success(function (response) {$scope.names =response;});
    });


</script>


</body>
</html>

 

naforum.png

plik html z takimi samymi jsonami co na powyższym zdjęciu

Kopiuj
html

[
{
"id": 1,
"salary": 0,
"firstName": null,
"lastName": null,
"address": null,
"phones": []
},
{
"id": 2,
"salary": 500,
"firstName": "Jan",
"lastName": "Sobieski",
"address": null,
"phones": []
},
{
"id": 3,
"salary": 500,
"firstName": "Jan",
"lastName": "Sobieski",
"address": null,
"phones": []
},
{
"id": 4,
"salary": 0,
"firstName": null,
"lastName": null,
"address": null,
"phones": []
}
]
 

Witam, nie wiem co jest nie tak z tym moim controllerem...
Jak w angularze mam " $http.get('http://localhost:8080/employee/')"
to nic się nie dzieje, brak reakcji ( jakby adres zły był [ bo pewnie jest ] )
a jak wpisze cokolwiek innego w $http.get('.....') czy to będzie ten plik html z danymi, lub jaki kolwiek inny z internetu adres http z jsonami to wszystko się dobrze wyświetla

Adawo
  • Rejestracja:prawie 19 lat
  • Ostatnio:prawie 8 lat
  • Lokalizacja:Kraków
0

A co pokazuje konsola JS ?

P2
jaka konsola JS :P?
Adawo
W chromie nazywa się to "Narzędzia dla programistów" (Ctrl + Shift + j), w FF "Konsola WWW" jak się nie mylę.
P2
XMLHttpRequest cannot load http://localhost:8080/employee/employee. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:63342' is therefore not allowed access.
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0
  1. RestController to jest już Component, nie musisz powielać adnotacji bez potrzeby
  2. W mappingu dałbym na wszelki wypadek "/employee"
  3. A co się dzieje jak z przeglądarki otworzysz sobie ten adres?
  4. Pokaż log ze startu aplikacji, spring loguje tam urle które mapuje

"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
P2
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 4 lata
  • Postów:47
0

tak jak w postmanie.

screenshot-20170109123108.png

logi

. ____ _ __ _ _
/\ / ' __ _ () __ __ _ \ \ \
( ( )_
_ | '_ | '| | ' / ` | \ \ \
\/ )| |)| | | | | || (| | ) ) ) )
' |
| .__|| ||| |_, | / / / /
=========|
|==============|/=////
:: Spring Boot :: (v1.4.1.RELEASE)

2017-01-09 11:04:05.022 INFO 6500 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [class org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$b4be6e75] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2017-01-09 11:04:05.591 INFO 6500 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2017-01-09 11:04:05.606 INFO 6500 --- [ main] o.apache.catalina.core.StandardService : Starting service Tomcat
2017-01-09 11:04:05.607 INFO 6500 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.5
2017-01-09 11:04:05.740 INFO 6500 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2017-01-09 11:04:05.741 INFO 6500 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 2785 ms
2017-01-09 11:04:05.899 INFO 6500 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2017-01-09 11:04:05.903 INFO 6500 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/]
2017-01-09 11:04:05.904 INFO 6500 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/
]
2017-01-09 11:04:05.904 INFO 6500 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/]
2017-01-09 11:04:05.904 INFO 6500 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/
]
2017-01-09 11:04:06.195 INFO 6500 --- [ main] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'default'
2017-01-09 11:04:06.216 INFO 6500 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [
name: default
...]
2017-01-09 11:04:06.306 INFO 6500 --- [ main] org.hibernate.Version : HHH000412: Hibernate Core {5.0.11.Final}
2017-01-09 11:04:06.308 INFO 6500 --- [ main] org.hibernate.cfg.Environment : HHH000206: hibernate.properties not found
2017-01-09 11:04:06.310 INFO 6500 --- [ main] org.hibernate.cfg.Environment : HHH000021: Bytecode provider name : javassist
2017-01-09 11:04:06.364 INFO 6500 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
2017-01-09 11:04:07.332 INFO 6500 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
2017-01-09 11:04:07.999 INFO 6500 --- [ main] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000227: Running hbm2ddl schema export
Hibernate: alter table employeer drop foreign key FKr003lq531f5j0e3n98qu9ys7s
Hibernate: alter table phone drop foreign key FKp6j9el1bbg4ocl1dha1hq4c0y
Hibernate: drop table if exists account
Hibernate: drop table if exists address
Hibernate: drop table if exists employeer
Hibernate: drop table if exists phone
Hibernate: create table account (id bigint not null auto_increment, balance integer not null, owner_name varchar(255), primary key (id))
Hibernate: create table address (id bigint not null auto_increment, locality varchar(255), street varchar(255), street_number integer not null, zip_code varchar(255), primary key (id))
Hibernate: create table employeer (id bigint not null auto_increment, first_name varchar(255), last_name varchar(255), salary double precision not null, address_id bigint, primary key (id))
Hibernate: create table phone (id bigint not null auto_increment, number varchar(255), owner_id bigint, primary key (id))
Hibernate: alter table employeer add constraint FKr003lq531f5j0e3n98qu9ys7s foreign key (address_id) references address (id)
Hibernate: alter table phone add constraint FKp6j9el1bbg4ocl1dha1hq4c0y foreign key (owner_id) references employeer (id)
2017-01-09 11:04:10.470 INFO 6500 --- [ main] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000230: Schema export complete
2017-01-09 11:04:10.519 INFO 6500 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2017-01-09 11:04:11.360 INFO 6500 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@291ae: startup date [Mon Jan 09 11:04:02 CET 2017]; root of context hierarchy
2017-01-09 11:04:11.443 INFO 6500 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/account/withdraw/{id}/{ammo}],methods=[POST]}" onto public void com.martin.AccountController.withdraw(java.lang.Long,int)
2017-01-09 11:04:11.444 INFO 6500 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/account/{id}],methods=[GET]}" onto com.martin.Account com.martin.AccountController.findAccountById(java.lang.Long)
2017-01-09 11:04:11.444 INFO 6500 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/account/dodaj/{id}/{ammo}],methods=[POST]}" onto public void com.martin.AccountController.dodaj(java.lang.Long,int)
2017-01-09 11:04:11.445 INFO 6500 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/account/friendsprofile],produces=[application/json]}" onto java.util.List<com.martin.Account> com.martin.AccountController.findAll()
2017-01-09 11:04:11.445 INFO 6500 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/account/add],methods=[POST]}" onto public void com.martin.AccountController.addAccount(com.martin.Account)
2017-01-09 11:04:11.445 INFO 6500 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/address/add],methods=[POST]}" onto public void com.martin.AddressController.saveAddress(com.martin.Address)
2017-01-09 11:04:11.448 INFO 6500 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/employee/delete/{id:\d+}],methods=[DELETE]}" onto void com.martin.EmployeeController.delete(java.lang.Long)
2017-01-09 11:04:11.449 INFO 6500 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/employee/{id}/phones/{phoneId:\d+}],methods=[GET]}" onto com.martin.Phone com.martin.EmployeeController.findCompanyEmployeeWithId(long,long)
2017-01-09 11:04:11.449 INFO 6500 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/employee/salary/{salary}],methods=[GET]}" onto java.util.List<com.martin.Employeer> com.martin.EmployeeController.findBySalaryGreaterThan(double)
2017-01-09 11:04:11.449 INFO 6500 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/employee/add],methods=[POST]}" onto public void com.martin.EmployeeController.saveEmployeer(com.martin.Employeer)
2017-01-09 11:04:11.449 INFO 6500 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/employee],methods=[GET]}" onto public java.lang.Iterable<com.martin.Employeer> com.martin.EmployeeController.getTalks()
2017-01-09 11:04:11.449 INFO 6500 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/employee/{firstName:[a-zA-Z]+}],methods=[GET]}" onto java.lang.Iterable<com.martin.Employeer> com.martin.EmployeeController.findByFirstName(java.lang.String)
2017-01-09 11:04:11.449 INFO 6500 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/employee/lastname/{lastName:[a-zA-Z]+}],methods=[GET]}" onto java.lang.Iterable<com.martin.Employeer> com.martin.EmployeeController.findByLastName(java.lang.String)
2017-01-09 11:04:11.451 INFO 6500 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/employee/{id:\d+}],methods=[GET]}" onto com.martin.Employeer com.martin.EmployeeController.findOne(java.lang.Long)
2017-01-09 11:04:11.451 INFO 6500 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/employee/list/{firstName}],methods=[GET]}" onto java.util.List<com.martin.Employeer> com.martin.EmployeeController.countByFirstName(java.lang.String)
2017-01-09 11:04:11.452 INFO 6500 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/employee/count/{salary}],methods=[GET]}" onto java.util.List<com.martin.Employeer> com.martin.EmployeeController.countBySalary(double)
2017-01-09 11:04:11.453 INFO 6500 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/phone],methods=[GET]}" onto public java.lang.Iterable<com.martin.Phone> com.martin.PhoneController.getPhones()
2017-01-09 11:04:11.453 INFO 6500 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/phone/adds],methods=[POST]}" onto public void com.martin.PhoneController.savePhone(com.martin.Phone)
2017-01-09 11:04:11.455 INFO 6500 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2017-01-09 11:04:11.455 INFO 6500 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2017-01-09 11:04:11.488 INFO 6500 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-01-09 11:04:11.488 INFO 6500 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/
] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-01-09 11:04:11.537 INFO 6500 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-01-09 11:04:11.805 INFO 6500 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2017-01-09 11:04:11.977 INFO 6500 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2017-01-09 11:04:12.000 INFO 6500 --- [ main] com.martin.MartinApplication : Started MartinApplication in 9.991 seconds (JVM running for 10.528)
2017-01-09 11:04:35.498 INFO 6500 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring FrameworkServlet 'dispatcherServlet'
2017-01-09 11:04:35.498 INFO 6500 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started
2017-01-09 11:04:35.518 INFO 6500 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 20 ms
2017-01-09 11:04:35.607 INFO 6500 --- [nio-8080-exec-1] o.h.h.i.QueryTranslatorFactoryInitiator : HHH000397: Using ASTQueryTranslatorFactory

Adawo
  • Rejestracja:prawie 19 lat
  • Ostatnio:prawie 8 lat
  • Lokalizacja:Kraków
1

Problemem jest próba dostępu do zasobu z innej domeny z perspektywy aplikacji angularowej:

Kopiuj
XMLHttpRequest cannot load http://localhost:8080/employee/employee. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:63342' is therefore not allowed access. 

Tu masz więcej informacji na ten temat:

P2
dzięki, dodałem w kontrolerze @CrossOrigin(origins = "http://localhost:63342") i działa :)
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)