OSDN Git Service

editor: article editor supports media embed
[newslash/newslash.git] / src / newslash_web / templates / common / article / editor.html.tt2
1 <div class="content-editor-wrap">
2   <div class="alert alert-info post-done" v-if="mode == 'posted' && isUpdate">
3     投稿を更新しました。
4     <span v-if="contentType == 'story'"><a href="#" @click="leavePreview">[再編集]</a></span>
5   </div>
6   <div class="alert alert-info post-done" v-else-if="mode == 'posted'">
7     投稿を行いました。URL:<A :href="createdUrl" v-text="createdUrl"></a>
8     <span v-if="contentType == 'story'"><a href="#" @click="leavePreview">[再編集]</a></span>
9   </div>
10   <div class="alert alert-info post-error-message" v-show="message">
11     <div v-if="message == 'duplicated_post'">エラー:すでに同じ内容が投稿されています</div>
12     <div v-else-if="message == 'server_error'">サーバーエラー:投稿に失敗しました</div>
13     <div v-else-if="message == 'no_title'">エラー:タイトルがありません</div>
14     <div v-else-if="message == 'no_content'">エラー:本文かURLを指定してください</div>
15     <div v-else-if="message == 'invalid_email'">エラー:不正なメールアドレスです</div>
16     <div v-else-if="message == 'invalid_url'">エラー:不正なURLです</div>
17     <div v-else v-text="'エラー:' + message"></div>
18   </div>
19
20   <form class="content-editor" v-if="mode == 'editing'">
21     <p>
22       <label>タイトル(必須):
23         <input type="text" name="title" v-model="editor.title" placeholder="タイトル" />
24       </label>
25     </p>
26
27     <div v-if="contentType == 'story'">
28       <p>
29         <label>日時(JST):
30           <input type="datetime-local" name="createtime"
31                  v-model="editor.createtime" placeholder="2017/01/01 12:00:00"
32                  value="[% date.format(date.now, "%FT%T") %]"/>
33         </label>
34       </p>
35       <p>
36         <label>編集者:
37           <select name="author" v-model="editor.author" >
38             [%- FOREACH author IN authors -%]
39             <option value="[% author.nickname %]"
40                     [% IF author.uid == user.uid %]selected="selected"[% END %]>[% author.nickname %]</option>
41             [%- END -%]
42           </select>
43         </label>
44       </p>
45     </div>
46
47     <p v-if="contentType == 'story'">
48       <label>部門名:
49         <input type="text" name="dept" v-model="editor.dept" placeholder="部門名" />
50       </label>
51     </p>
52    
53     <p>
54       <label>本文:
55         <textarea name="introtext" v-model="editor.intro_text" class="editor"
56                   placeholder="本文をここに記述してください" ></textarea>
57       </label>
58     </p>
59
60     <p v-if="contentType == 'story'">
61       <label>続きの本文:
62         <textarea name="bodytext" v-model="editor.body_text"
63                   placeholder="続きの本文をここに記述してください" ></textarea>
64       </label>
65     </p>
66
67     <p v-if="contentType == 'story'">
68       <label>メディア:
69         <textarea name="media" v-model="editor.media"
70                   placeholder="埋め込みコンテンツなどをここに記述してください" ></textarea>
71       </label>
72     </p>
73
74     <p v-if="contentType == 'submission'">
75       <label>URL(本文がない場合は必須):
76         <input type="text" name="url" v-model="editor.url" placeholder="重要なURLを1つ(任意)" />
77       </label>
78     </p>
79
80     <p v-if="contentType == 'submission'">
81       <label>投稿者のメールアドレス/URL(任意):
82         <input type="text" name="email" v-model="editor.email"
83                placeholder="メールアドレスかURL" />
84       </label>
85     </p>
86
87     <div class="tag-editor">
88       <label for="tag-single">タグ(空白区切り、任意):
89         <input type="text" name="tag-single" v-model="editor.tags_string">
90       </label>
91
92       <div class="topics">
93         <label>トピックス(タグに応じて自動的に設定されます):</label>
94         <ol class="topic-items">
95           <li v-for="topic in currentTopics">
96             <img :src="topicIconURL(topic)" v-show="topicIconURL(topic)" />
97             <span v-text="topic"></span>
98           </li>
99         </ol>
100       </div>
101
102     </div><!-- .tag-editor -->
103     
104     <div v-if="contentType == 'story'">
105       <label>関連ストーリー:
106         <div class="related-stories">
107           <ul v-for="rel in item.related">
108             <li v-if="rel.type == 'story'"><a :href="'/story/' + rel.key_id" v-text="rel.title"></a></li>
109           </ul>
110         </div>
111         <textarea name="add_related" v-model="editor.related_urls"
112                   placeholder="関連ストーリー(1行に1URL)" ></textarea>
113       </label>
114     </div>
115
116     <div v-if="contentType == 'story'">
117       <p>
118         <label>メディアURL:
119           <input type="text" name="mediaurl" v-model="editor.mediaurl" placeholder="URL" />
120         </label>
121       </p>
122       <p>
123         <label>メディアタイプ:
124           <select name="mediatype" v-model="editor.mediatype">
125             <option value="youtube">YouTube</option>
126           </select>
127         </label>
128       </p>
129     </div>
130
131     <div v-if="contentType == 'story' || contentType == 'journal'">
132       <p>
133         <label>コメント設定:
134           <select name="comment_status" v-model="editor.comment_status">
135             <option value="disabled">コメント無効</option>
136             <option value="enabled" selected="selected">コメント有効</option>
137             <option value="friends_fof_only">トモダチとそのトモダチ</option>
138             <option value="friends_only">トモダチのみ</option>
139             <option value="logged_in">ログインユーザのみ</option>
140             <option value="no_foe">テキじゃないみんな</option>
141             <option value="no_foe_eof">テキとトモダチのテキ以外</option>
142           </select>
143         </label>
144       </p>
145
146       <p class="checkbox" v-if="contentType == 'story'">
147         <label>
148           <input type="checkbox" name="display" v-model="editor.display" value="1" checked="checked"/>
149           管理者や編集者以外にも表示
150         </label>
151       </p>
152     </div>
153
154     <div v-if="contentType == 'journal' && item.formatter == 'legacy'">
155       <p>
156         <label>投稿形式:
157           <select name="posttype" v-model="editor.posttype">
158             <option value="1">テキスト形式(HTML OK!)</option>
159             <option value="2">HTML形式</option>
160             <option value="3">プレーンテキスト(HTML不可)</option>
161             <option value="4">コード(等幅)</option>
162           </select>
163         </label>
164       </p>
165     </div>
166
167     <p class="checkbox" v-show="!item.id && contentType == 'journal'">
168       <label>
169         <input type="checkbox" name="submissioncopy" v-model="editor.submissioncopy" value="0" />
170         日記のコピーをタレコミとして投稿する
171       </label>
172     </p>
173
174     <div class="submit post-preview">
175       <button type="submit" @click.prevent="showPreview">投稿確認</button>
176       <button type="button" v-if="isUpdate"
177               @click.prevent="cancelEdit">キャンセル</button>
178     </div>
179   </form>
180
181   <form class="submit post-submit" v-if="mode == 'preview'">
182     <p>
183       <button type="submit" @click.prevent="postItem" :disabled="mode == 'posting'">投稿</button>
184       <button type="button" @click="leavePreview" :disabled="mode == 'posting'">戻る</button>
185     </p>
186   </form>
187
188   <div class="alert alert-info" v-show="message">
189     <div v-if="message == 'duplicated_post'">エラー:すでに同じ内容が投稿されています</div>
190     <div v-else-if="message == 'server_error'">サーバーエラー:投稿に失敗しました</div>
191     <div v-else-if="message == 'no_title'">エラー:タイトルがありません</div>
192     <div v-else-if="message == 'no_content'">エラー:本文かURLを指定してください</div>
193     <div v-else-if="message == 'invalid_email'">エラー:不正なメールアドレスです</div>
194     <div v-else-if="message == 'invalid_url'">エラー:不正なURLです</div>
195     <div v-else v-text="'エラー:' + message"></div>
196   </div>
197
198   <div class="checkbox" v-if="mode == 'editing'">
199     <label>
200       <input type="checkbox" v-model="enableAutoPreview" :disabled="editor.formatter == 'legacy'"/>
201       自動プレビューを有効にする
202     </label>
203     <div class="alert alert-info" v-if="editor.formatter != 'modern'">
204       このフォーマットでは自動プレビューを利用できません
205     </div>
206   </div>
207 </div>