]> git.ipfire.org Git - ipfire.org.git/blob - src/templates/wiki/edit.html
wiki: Add keyboard shortcuts to edit text
[ipfire.org.git] / src / templates / wiki / edit.html
1 {% extends "base.html" %}
2
3 {% block title %}{% if page %}{{ _("Edit %s") % page.title }}{% else %}{{ _("Create A New Page") }}{% end %}{% end block %}
4
5 {% block sidebar %}
6 {% set help = backend.wiki.get_page("/wiki/edit") %}
7
8 {% if help %}
9 {% raw help.html %}
10 {% end %}
11 {% end block %}
12
13 {% block main %}
14 <div class="card mb-4">
15 <div class="card-body">
16 <h4 class="card-title">
17 {% if page %}{{ _("Edit %s") % page.title }}{% else %}{{ _("Create A New Page") }}{% end %}
18 </h4>
19
20 <form action="" method="POST">
21 {% raw xsrf_form_html() %}
22
23 <div class="form-group editor">
24 <div class="btn-toolbar mb-3" role="toolbar">
25 <div class="btn-group btn-group-sm mr-2" role="group">
26 <button type="button" class="btn btn-secondary"
27 id="bold" title="{{ _("Bold") }} [{{ _("Ctrl") }}-B]">
28 <i class="fas fa-bold"></i>
29 </button>
30 <button type="button" class="btn btn-secondary"
31 id="italic" title="{{ _("Italic") }} [{{ _("Ctrl") }}-I]">
32 <i class="fas fa-italic"></i>
33 </button>
34 </div>
35
36 <div class="btn-group btn-group-sm mr-2" role="group">
37 <button type="button" class="btn btn-secondary"
38 id="headline-up" title="{{ _("Headline one level up") }}">
39 <i class="fas fa-chevron-left"></i>
40 </button>
41 <button type="button" class="btn btn-secondary"
42 id="headline" title="{{ _("Headline") }} [{{ _("Ctrl") }}-H]">
43 <i class="fas fa-heading"></i>
44 </button>
45 <button type="button" class="btn btn-secondary"
46 id="headline-down" title="{{ _("Headline one level down") }}">
47 <i class="fas fa-chevron-right"></i>
48 </button>
49 </div>
50
51 <a class="btn btn-sm btn-secondary" href="{{ path }}/_files"
52 target="_blank" title="{{ _("Files") }}">
53 <i class="fas fa-images"></i>
54 </a>
55 </div>
56
57 <textarea class="form-control" rows="16" name="content" id="content" placeholder="{{ _("Text") }}"
58 >{% if page and page.markdown %}{{ page.markdown }}{% end %}</textarea>
59 </div>
60
61 <div class="form-group row">
62 <label class="col-sm-4 col-form-label">{{ _("What has changed?") }}</label>
63 <div class="col-sm-8">
64 <input type="text" class="form-control" name="changes" required>
65 </div>
66 </div>
67
68 {% if page and not page.is_watched_by(current_user) %}
69 <div class="form-group form-check">
70 <div class="custom-control custom-checkbox">
71 <input type="checkbox" class="custom-control-input" name="watch" id="watch" checked>
72 <label class="custom-control-label" for="watch">{{ _("Watch this page") }}</label>
73 </div>
74
75 <small class="form-text text-muted">
76 {{ _("Get notified when this page is changed") }}
77 </small>
78 </div>
79 {% end %}
80
81 <button type="submit" class="btn btn-primary btn-block">
82 {% if page %}{{ _("Save Page") }}{% else %}{{ _("Create Page") }}{% end %}
83 </button>
84 </form>
85 </div>
86 </div>
87
88 <div id="preview" class="fade show">
89 <div class="d-flex align-items-center mb-4">
90 <h4 class="mb-0">{{ _("Preview") }}</h4>
91 <div id="spinner" class="spinner-border ml-auto" role="status" aria-hidden="true"></div>
92 </div>
93
94 <div class="card">
95 <div class="card-body mb-0">
96 <div id="preview-content" class="wiki-content mb-0">
97 {{ _("Loading...") }}
98 </div>
99 </div>
100 </div>
101 </div>
102 {% end block %}
103
104 {% block javascript %}
105 {% import os.path %}
106
107 <script src="{{ static_url("js/editor.js") }}"></script>
108 <script type="text/javascript">
109 var update = null;
110
111 $(document).ready(function() {
112 var preview = $("#preview");
113 preview.hide();
114
115 $("#content").on("keyup", function(e) {
116 if (update)
117 clearTimeout(update);
118
119 var content = $(this).val();
120
121 // If the field is all empty, we will hide it
122 if (content)
123 preview.show();
124 else
125 preview.hide();
126
127 // Go into update mode
128 preview.addClass("updating");
129
130 update = setTimeout(function() {
131 var c = $("#preview-content");
132
133 $.post("{{ os.path.join(path, "_render") }}", { content : content },
134 function(data) {
135 c.html(data);
136
137 // Update finished
138 preview.removeClass("updating");
139 }
140 );
141 }, 750);
142 });
143 });
144 </script>
145 {% end block %}