447 lines
17 KiB
Text
447 lines
17 KiB
Text
[%# entry.tt
|
|
|
|
Page to post and edit entries
|
|
|
|
Authors:
|
|
Afuna <coder.dw@afunamatata.com>
|
|
|
|
Copyright (c) 2011-2014 by Dreamwidth Studios, LLC.
|
|
|
|
This program is free software; you may redistribute it and/or modify it under
|
|
the same terms as Perl itself. For a copy of the license, please reference
|
|
'perldoc perlartistic' or 'perldoc perlgpl'.
|
|
%]
|
|
|
|
[%- CALL dw.active_resource_group( "foundation" ) -%]
|
|
|
|
[%- dw.need_res(
|
|
"stc/css/pages/entry/new.css"
|
|
"stc/css/components/button-groups.css"
|
|
"stc/display_none.css"
|
|
) -%]
|
|
|
|
[%- dw.need_res( { group => "foundation" },
|
|
|
|
## tags (autocomplete)
|
|
"js/vendor/jquery.vertigro.js"
|
|
"js/jquery/jquery.ui.menu.js"
|
|
"js/jquery/jquery.ui.autocomplete.js"
|
|
"js/components/jquery.autocompletewithunknown.js"
|
|
"stc/jquery/jquery.ui.menu.css"
|
|
"stc/jquery/jquery.ui.autocomplete.css"
|
|
"stc/css/components/autocompletewithunknown.css"
|
|
|
|
## collapsing
|
|
"js/components/jquery.collapse.js"
|
|
"stc/css/components/collapse.css"
|
|
|
|
## date
|
|
"js/vendor/pickadate.js/picker.js"
|
|
"js/vendor/pickadate.js/picker.date.js"
|
|
"js/vendor/pickadate.js/picker.time.js"
|
|
"js/vendor/pickadate.js/legacy.js"
|
|
"stc/css/components/pickadate/datetime.css"
|
|
|
|
# page-specific
|
|
"js/pages/entry/new.js"
|
|
|
|
# code required for old RTE
|
|
"js/6alib/httpreq.js"
|
|
"js/6alib/core.js"
|
|
"js/6alib/dom.js"
|
|
"js/livejournal.js"
|
|
"js/6alib/ippu.js"
|
|
"js/lj_ippu.js"
|
|
"js/poll.js"
|
|
"stc/fck/fckeditor.js"
|
|
"js/pages/entry/rte.js"
|
|
|
|
# old drafts functionality
|
|
"js/pages/entry/drafts.js"
|
|
|
|
) -%]
|
|
|
|
[% sections.title = action.edit ? dw.ml( '.title.edit' ) : dw.ml( '.title' ) %]
|
|
[% sections.contentopts = '' %]
|
|
|
|
[% sections.head = BLOCK %]
|
|
[%- chalresp_js -%]
|
|
|
|
<script type="text/javascript">
|
|
var postFormInitData = new Object();
|
|
postFormInitData.edit = [% action.edit ? "true" : "false" %];
|
|
|
|
postFormInitData.moodpics = {
|
|
[%- FOREACH mood = moodtheme.pics.pairs %]
|
|
[% mood.key | js %] : [ [% mood.value.name | js %], [% mood.value.pic | js %], [% mood.value.width | js %], [% mood.value.height | js %] ]
|
|
[%- UNLESS loop.last %],[% END -%]
|
|
[% END %]
|
|
};
|
|
|
|
postFormInitData.panels = {
|
|
"show" : {
|
|
[%- FOREACH panel = panels.show.pairs -%]
|
|
[%- panel.key | js -%] : [%- panel.value ? "true" : "false" -%]
|
|
[%- UNLESS loop.last %],[% END -%]
|
|
[%- END -%]
|
|
}
|
|
};
|
|
|
|
postFormInitData.security = {
|
|
[%- FOREACH level = security_options.pairs %]
|
|
[%- level.key | js %] : { 'value': [%~ level.value.value | js ~%]
|
|
, 'label': [%~ level.value.label | ml | js ~%]
|
|
, 'format': [%~ level.value.format | ml | js ~%]
|
|
|
|
[%- IF level.value.image -%]
|
|
, 'image': { 'src': [%~ level.value.image.src | js ~%]
|
|
, 'width': [%~ level.value.image.width | js ~%]
|
|
, 'height': [%~ level.value.image.height | js ~%]
|
|
}
|
|
[%- END -%]
|
|
}
|
|
[%- UNLESS loop.last %],[% END -%]
|
|
[% END %]
|
|
};
|
|
|
|
postFormInitData.minAnimation = [% min_animation ? "true" : "false" %];
|
|
|
|
postFormInitData.strings = {
|
|
"delete_confirm" : [%- "entryform.delete.confirm" | ml | js -%],
|
|
"delete_xposts_confirm": [%- "entryform.delete.xposts.confirm" | ml | js -%]
|
|
};
|
|
|
|
[%- IF remote && remote.can_use_userpic_select -%]
|
|
postFormInitData.iconBrowser = {
|
|
"keywordorder": [%- icon_browser.keywordorder ? "true" : "false" -%],
|
|
"metatext": [%- icon_browser.metatext ? "true" : "false" -%],
|
|
"smallicons": [%- icon_browser.smallicons ? "true": "false" -%]
|
|
};
|
|
[%- END -%]
|
|
|
|
</script>
|
|
[% END # sections.head %]
|
|
|
|
<div class="alert-box secondary">[% ".beta.on" | ml( aopts = "href='$site.root/betafeatures'", user = betacommunity.ljuser_display ) %]</div>
|
|
|
|
[%- IF warnings.exist -%]
|
|
[%- FOREACH warning IN warnings.get_all -%]
|
|
<div class="alert-box">[%- warning.message -%]</div>
|
|
[%- END -%]
|
|
[%- END -%]
|
|
|
|
<form method="POST" id="js-post-entry" action="[% action.url %]" class="
|
|
[%- formwidth == "narrow" ? "entry-partial-width" : "entry-full-width" -%]">
|
|
<input type="hidden" id="nojs" value="1" name="nojs" />
|
|
|
|
[%- dw.form_auth -%]
|
|
|
|
<div class="current-entry row"><div class="columns"><!-- Start main column sub & entry -->
|
|
|
|
[%- IF remote -%]
|
|
<div class="toolbar-container">
|
|
<div class="row"><div class="columns">
|
|
<div class='panel radius toolbar text-right'>
|
|
[%- IF remote.can_create_polls OR journalu.can_create_polls -%]
|
|
[%- INCLUDE "components/icon-link-decorative.tt"
|
|
link = {
|
|
url = site.root _ "/poll/create"
|
|
newwindow = 1
|
|
}
|
|
icon = "graph-horizontal"
|
|
text = "Create Poll"
|
|
-%]
|
|
[%- END -%]
|
|
|
|
<span id="js-entry-settings">
|
|
[%- INCLUDE "components/icon-link-decorative.tt"
|
|
link = {
|
|
url = site.root _ "/entry/options"
|
|
newwindow = 1
|
|
}
|
|
icon = "widget"
|
|
text = "Rearrange Panels"
|
|
-%]
|
|
</span>
|
|
</div>
|
|
</div></div>
|
|
<div class="row"><div class="columns">
|
|
<div class="panel" id="js-settings-panel"></div>
|
|
</div></div>
|
|
|
|
</div>
|
|
[%- END -%]
|
|
|
|
<div class="row"><div class="columns">
|
|
<div class='subject-container'>
|
|
[%- form.textbox( label = dw.ml(".subject.label")
|
|
name = "subject"
|
|
|
|
maxlength = limits.subject_length
|
|
size = "50"
|
|
|
|
labelclass = "hidden"
|
|
class = "draft-autosave"
|
|
|
|
placeholder = dw.ml(".subject.placeholder")
|
|
) -%]
|
|
</div>
|
|
</div></div>
|
|
|
|
<div class="row"><div class="columns">
|
|
<div class='markup-container'>
|
|
[%- form.select(
|
|
label = 'Formatting type'
|
|
labelclass = 'invisible'
|
|
name = 'editor'
|
|
id = 'editor'
|
|
select = editors.selected
|
|
items = editors.items
|
|
class = "draft-autosave"
|
|
) -%]
|
|
|
|
<a href="[% 'markup.helplink.url' | ml %]" tabindex="-1" target="_blank">[%-
|
|
dw.img('help', '',
|
|
{
|
|
alt => dw.ml('markup.helplink.alttext'),
|
|
title => dw.ml('markup.helplink.alttext'),
|
|
style => 'box-sizing: content-box;'
|
|
}
|
|
)
|
|
-%]</a>
|
|
</div>
|
|
</div></div>
|
|
|
|
<div class="row"><div class="columns">
|
|
<div class='event-container'>
|
|
[%- form.textarea( label = dw.ml(".event.label")
|
|
name = "event"
|
|
id = "entry-body"
|
|
|
|
cols = "50"
|
|
rows = "18"
|
|
wrap = "soft"
|
|
|
|
labelclass = "hidden"
|
|
class = "draft-autosave"
|
|
|
|
placeholder = dw.ml(".event.placeholder")
|
|
) -%]
|
|
<small id="draftstatus" type="text" disabled="disabled" name="draftstatus" role="status" aria-live="polite"></small>
|
|
</div>
|
|
</div></div>
|
|
|
|
<div class="row"><div class="columns">
|
|
<div class="button-bar entry-quick-actions">
|
|
<ul class="no-bullet entry-quick-metadata">
|
|
|
|
<li>
|
|
[%- form.submit(
|
|
value = dw.ml(action.edit ? '.button.edit.quick' : '.button.post.quick')
|
|
name = "action:post"
|
|
)
|
|
%]</li>[%- FOREACH level = security;
|
|
level.label = dw.ml( level.label );
|
|
level.format = dw.ml( level.format );
|
|
END;
|
|
-%]<li>[%- INCLUDE components/fancyselect.tt
|
|
name = "security"
|
|
id = "js-security"
|
|
label = dw.ml( '.select.security' )
|
|
|
|
items = security
|
|
-%]</li>
|
|
|
|
[%~ IF journallist.size > 1 %]
|
|
[%-
|
|
journalselect = [];
|
|
FOREACH journal IN journallist;
|
|
isJournal = journal.equals(remote);
|
|
userFormat = isJournal ? "@$journal.user" : "@c:$journal.user";
|
|
journalselect.push({
|
|
label = journal.user
|
|
value = (isJournal ? "" : journal.user)
|
|
format = dw.ml( ".select.usejournal.format", { user => userFormat } )
|
|
});
|
|
END
|
|
~%]
|
|
|
|
<li>[%- INCLUDE components/fancyselect.tt
|
|
name = "usejournal"
|
|
id = "js-usejournal"
|
|
label = dw.ml( '.select.usejournal' )
|
|
|
|
items = journalselect
|
|
-%]</li>
|
|
[%~ ELSE ~%]
|
|
[%- SET usejournal = journallist.first
|
|
isComm = usejournal.is_community
|
|
isAdmin = isComm && remote.can_manage( usejournal )
|
|
|
|
~%]
|
|
|
|
[%~ IF usejournal ~%]
|
|
<li>
|
|
<span class="usejournal-text">
|
|
[% '.select.usejournal.format' | ml( user = usejournal.ljuser_display ) %]
|
|
</span>
|
|
[% form.hidden( name = "usejournal", id = "js-usejournal", value = usejournal.user,
|
|
"data-is-admin" = isAdmin
|
|
"data-is-comm" = isComm
|
|
) %]
|
|
</li>
|
|
[%~ ELSE ~%]
|
|
<li>
|
|
[%~ form.textbox(
|
|
name = "usejournal"
|
|
id = "js-usejournal"
|
|
label = dw.ml( '.select.usejournal' )
|
|
placeholder = dw.ml( '.select.usejournal.format', user = "journal" )
|
|
|
|
"data-is-admin" = isAdmin
|
|
"data-is-comm" = isComm
|
|
|
|
class = "radius"
|
|
) -%]
|
|
</li>
|
|
[%- END -%]
|
|
[%- END -%]
|
|
[%- form.hidden( id = "js-remote", name = "poster_remote", value = remote.user ) -%]
|
|
|
|
</ul>
|
|
<ul class="no-bullet secondary-actions">
|
|
<li>[%- form.submit( value = dw.ml('talk.btn.preview')
|
|
name = "action:preview"
|
|
id = "js-preview-button"
|
|
class = "secondary button"
|
|
)
|
|
-%]</li>
|
|
</ul>
|
|
</div>
|
|
</div></div>
|
|
</div>
|
|
</div> <!-- End main column sub & entry -->
|
|
|
|
[%- BLOCK components forCommunity = 0 %]
|
|
[% FOREACH component = items %]
|
|
[%- IF forCommunity -%]<div class='columns medium-6 large-4 [% IF loop.count == items.size %]end[% END %]'>[%- END -%]
|
|
|
|
<div class='panel component [% component %]-component[% UNLESS forCommunity || panels.show.$component -%] inactive-component[%- END -%]'
|
|
data-collapse='[% component %]' data-collapse-state='[% panels.collapsed.$component ? "collapsed" : "expanded" %]'>
|
|
[%- file = forCommunity || editable.$component
|
|
? "entry/module-${component}.tt"
|
|
: "entry/display/module-${component}.tt"
|
|
-%]
|
|
[%- dw.scoped_include( file ); %]
|
|
</div>
|
|
|
|
[%- IF forCommunity -%]</div>[%- END -%]
|
|
[%- END -%]
|
|
[% END -%]
|
|
|
|
<div class="row components-columns">
|
|
<div class="columns components first-column sortable-components"><!-- first column of components -->
|
|
<div class="inner">
|
|
[% PROCESS components items = panels.order.shift %]
|
|
</div>
|
|
</div>
|
|
<div class='columns components second-column sortable-components'> <!-- second column of components -->
|
|
<div class="inner">
|
|
[% PROCESS components items = panels.order.shift %]
|
|
</div>
|
|
</div>
|
|
|
|
<div class='columns components third-column sortable-components'> <!-- third column of components -->
|
|
<div class="inner">
|
|
[% PROCESS components items = panels.order.shift %]
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
[%- IF remote -%]
|
|
<div class="community-administration">
|
|
<hr>
|
|
<div class="row">
|
|
<div class="columns"><h2>Community Administration</h2></div>
|
|
</div>
|
|
<div class="row components">
|
|
[%- PROCESS components forCommunity = 1
|
|
items = [ "community-flags", "sticky" ] -%]
|
|
</div>
|
|
</div>
|
|
[%- END -%]
|
|
|
|
<div class="row components js-only">
|
|
<div class="columns">
|
|
[%- dw.scoped_include( "entry/module-access.tt" ) %]
|
|
[%- UNLESS remote -%]
|
|
[%- dw.scoped_include( "entry/login.tt" ) -%]
|
|
[%- END -%]
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<div class="columns">
|
|
<div class="button-bar">
|
|
[%- form.submit( value = dw.ml(action.edit ? '.button.edit' : '.button.post')
|
|
name = "action:post"
|
|
class = "button left"
|
|
)
|
|
-%]
|
|
|
|
[% IF action.edit %]
|
|
[%- form.submit( value = dw.ml( '.button.delete' )
|
|
name = "action:delete"
|
|
id = "js-delete-button"
|
|
class = "button secondary right"
|
|
)
|
|
-%]
|
|
[% END %]
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</form>
|
|
|
|
[% js_for_rte %]
|
|
<script>
|
|
var FCKLang;
|
|
if (!FCKLang) FCKLang = {};
|
|
FCKLang.UserPrompt = [% dw.ml('fcklang.userprompt') | js %];
|
|
FCKLang.UserPrompt_User = [% dw.ml('fcklang.userprompt.user') | js %];
|
|
FCKLang.UserPrompt_Site = [% dw.ml('fcklang.userprompt.site') | js %];
|
|
FCKLang.UserPrompt_SiteList =[% sitevalues %];
|
|
FCKLang.InvalidChars = [% dw.ml('fcklang.invalidchars') | js %];
|
|
FCKLang.LJUser = [% dw.ml('fcklang.ljuser') | js %];
|
|
FCKLang.LJVideo = [% dw.ml('fcklang.ljvideo2') | js %];
|
|
FCKLang.EmbedContents = [% dw.ml('fcklang.embedcontents') | js %];
|
|
FCKLang.EmbedPrompt = [% dw.ml('fcklang.embedprompt') | js %];
|
|
FCKLang.CutPrompt = [% dw.ml('fcklang.cutprompt') | js %];
|
|
FCKLang.ReadMore = [% dw.ml('fcklang.readmore') | js %];
|
|
FCKLang.CutContents = [% dw.ml('fcklang.cutcontents') | js %];
|
|
FCKLang.LJCut = [% dw.ml('fcklang.ljcut') | js %];
|
|
</script>
|
|
|
|
<script>
|
|
// These JS variables contain the contents of the various draft fields.
|
|
var restoredDraft = [% draft | js %];
|
|
var restoredEditor = [% draft_properties.editor | js %];
|
|
var restoredSubject = [% draft_properties.subject | js %];
|
|
var restoredUserpic = [% draft_properties.userpic | js %];
|
|
var restoredTaglist = [% draft_properties.taglist | js %];
|
|
var restoredMoodID = [% draft_properties.moodid | js %];
|
|
var restoredMood = [% draft_properties.mood | js %];
|
|
var restoredLocation = [% draft_properties.location1 | js %];
|
|
var restoredMusic = [% draft_properties.music | js %];
|
|
var restoredAdultReason = [% draft_properties.adultreason | js %];
|
|
var restoredCommentSet = [% draft_properties.commentset | js %];
|
|
var restoredCommentScr = [% draft_properties.commentscr | js %];
|
|
var restoredAdultCnt = [% draft_properties.adultcnt | js %];
|
|
|
|
var autoSaveInterval = [% autosave_interval || 3 %];
|
|
var savedMsg = [% dw.ml('.draft.autosave', {time => '[[time]]'}) | js %];
|
|
var restoredMsg = [% dw.ml('.draft.restored') | js %]
|
|
var confirmMsg = [% draft_subject_raw.defined && draft_subject_raw.length > 0 ? dw.ml( '.draft.confirm2', { subjectline => draft_subject_raw } ) : dw.ml('.draft.confirm') | js %]
|
|
|
|
var should_init = [%init_draft || 'null' %];
|
|
</script>
|