summaryrefslogtreecommitdiff
path: root/js/Headlines.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/Headlines.js')
-rwxr-xr-xjs/Headlines.js152
1 files changed, 126 insertions, 26 deletions
diff --git a/js/Headlines.js b/js/Headlines.js
index d01993838..2be3cd697 100755
--- a/js/Headlines.js
+++ b/js/Headlines.js
@@ -178,7 +178,7 @@ const Headlines = {
if (scores.length != 0) {
scores.forEach((score) => {
promises.push(xhr.post("backend.php",
- {op: "article", method: "setScore", "ids[]": ops.rescore[score].toString(), score: score}));
+ {op: "article", method: "setScore", "ids[]": ops.rescore[score], score: score}));
});
}
@@ -490,6 +490,7 @@ const Headlines = {
id="RROW-${hl.id}"
data-article-id="${hl.id}"
data-orig-feed-id="${hl.feed_id}"
+ data-orig-feed-title="${App.escapeHtml(hl.feed_title)}"
data-is-packed="1"
data-content="${App.escapeHtml(hl.content)}"
data-rendered-enclosures="${App.escapeHtml(Article.renderEnclosures(hl.enclosures))}"
@@ -514,10 +515,8 @@ const Headlines = {
${hl.cdm_excerpt ? hl.cdm_excerpt : ""}
</span>
- <div class="feed">
- <a href="#" style="background-color: ${hl.feed_bg_color}"
- onclick="Feeds.open({feed:${hl.feed_id}})">${hl.feed_title}</a>
- </div>
+ <a href="#" class="feed vfeedMenuAttach" style="background-color: ${hl.feed_bg_color}" data-feed-id="${hl.feed_id}"
+ onclick="Feeds.open({feed:${hl.feed_id}})">${hl.feed_title}</a>
<span class="updated" title="${hl.imported}">${hl.updated}</span>
@@ -566,6 +565,7 @@ const Headlines = {
row = `<div class="hl ${row_class} ${Article.getScoreClass(hl.score)}"
id="RROW-${hl.id}"
data-orig-feed-id="${hl.feed_id}"
+ data-orig-feed-title="${App.escapeHtml(hl.feed_title)}"
data-article-id="${hl.id}"
data-score="${hl.score}"
data-article-title="${App.escapeHtml(hl.title)}"
@@ -584,9 +584,9 @@ const Headlines = {
${Article.renderLabels(hl.id, hl.labels)}
</span>
</div>
- <span class="feed">
- <a style="background : ${hl.feed_bg_color}" href="#" onclick="Feeds.open({feed:${hl.feed_id}})">${hl.feed_title}</a>
- </span>
+ <span class="feed vfeedMenuAttach" data-feed-id="${hl.feed_id}">
+ <a style="background : ${hl.feed_bg_color}" href="#" onclick="Feeds.open({feed:${hl.feed_id}})">${hl.feed_title}</a>
+ </span>
<div title="${hl.imported}">
<span class="updated">${hl.updated}</span>
</div>
@@ -626,6 +626,12 @@ const Headlines = {
const search_query = Feeds._search_query ? Feeds._search_query.query : "";
const target = dijit.byId('toolbar-headlines');
+ // TODO: is this needed? destroyDescendants() below might take care of it (?)
+ if (this._headlinesSelectClickHandle)
+ dojo.disconnect(this._headlinesSelectClickHandle);
+
+ target.destroyDescendants();
+
if (tb && typeof tb == 'object') {
target.attr('innerHTML',
`
@@ -646,27 +652,37 @@ const Headlines = {
</span>
<span class='right'>
<span id='selected_prompt'></span>
- <div class='select-articles-dropdown' dojoType='fox.form.DropDownButton' title='"${__('Select articles')}'>
- <span>${__("Select...")}</span>
- <div dojoType='dijit.Menu' style='display: none;'>
- <div dojoType='dijit.MenuItem' onclick='Headlines.select("all")'>${__('All')}</div>
- <div dojoType='dijit.MenuItem' onclick='Headlines.select("unread")'>${__('Unread')}</div>
- <div dojoType='dijit.MenuItem' onclick='Headlines.select("invert")'>${__('Invert')}</div>
- <div dojoType='dijit.MenuItem' onclick='Headlines.select("none")'>${__('None')}</div>
- <div dojoType='dijit.MenuSeparator'></div>
- <div dojoType='dijit.MenuItem' onclick='Headlines.selectionToggleUnread()'>${__('Toggle unread')}</div>
- <div dojoType='dijit.MenuItem' onclick='Headlines.selectionToggleMarked()'>${__('Toggle starred')}</div>
- <div dojoType='dijit.MenuItem' onclick='Headlines.selectionTogglePublished()'>${__('Toggle published')}</div>
- <div dojoType='dijit.MenuSeparator'></div>
- <div dojoType='dijit.MenuItem' onclick='Headlines.catchupSelection()'>${__('Mark as read')}</div>
- <div dojoType='dijit.MenuItem' onclick='Article.selectionSetScore()'>${__('Set score')}</div>
- ${tb.plugin_menu_items}
+
+ <select class='select-articles-dropdown'
+ id='headlines-select-articles-dropdown'
+ data-prevent-value-change="true"
+ data-dropdown-skip-first="true"
+ dojoType="fox.form.Select"
+ title="${__('Show articles')}">
+ <option value='' selected="selected">${__("Select...")}</option>
+ <option value='headlines_select_all'>${__('All')}</option>
+ <option value='headlines_select_unread'>${__('Unread')}</option>
+ <option value='headlines_select_invert'>${__('Invert')}</option>
+ <option value='headlines_select_none'>${__('None')}</option>
+ <option></option>
+ <option value='headlines_selectionToggleUnread'>${__('Toggle unread')}</option>
+ <option value='headlines_selectionToggleMarked'>${__('Toggle starred')}</option>
+ <option value='headlines_selectionTogglePublished'>${__('Toggle published')}</option>
+ <option></option>
+ <option value='headlines_catchupSelection'>${__('Mark as read')}</option>
+ <option value='article_selectionSetScore'>${__('Set score')}</option>
+ ${tb.plugin_menu_items != '' ?
+ `
+ <option></option>
+ ${tb.plugin_menu_items}
+ ` : ''}
${headlines.id === 0 && !headlines.is_cat ?
`
- <div dojoType='dijit.MenuSeparator'></div>
- <div dojoType='dijit.MenuItem' class='text-error' onclick='Headlines.deleteSelection()'>${__('Delete permanently')}</div>
+ <option></option>
+ <option class='text-error' value='headlines_deleteSelection'>${__('Delete permanently')}</option>
` : ''}
- </div>
+ </select>
+
${tb.plugin_buttons}
</span>
`);
@@ -675,6 +691,48 @@ const Headlines = {
}
dojo.parser.parse(target.domNode);
+
+ this._headlinesSelectClickHandle = dojo.connect(dijit.byId("headlines-select-articles-dropdown"), 'onItemClick',
+ (item) => {
+ const action = item.option.value;
+
+ switch (action) {
+ case 'headlines_select_all':
+ Headlines.select('all');
+ break;
+ case 'headlines_select_unread':
+ Headlines.select('unread');
+ break;
+ case 'headlines_select_invert':
+ Headlines.select('invert');
+ break;
+ case 'headlines_select_none':
+ Headlines.select('none');
+ break;
+ case 'headlines_selectionToggleUnread':
+ Headlines.selectionToggleUnread();
+ break;
+ case 'headlines_selectionToggleMarked':
+ Headlines.selectionToggleMarked();
+ break;
+ case 'headlines_selectionTogglePublished':
+ Headlines.selectionTogglePublished();
+ break;
+ case 'headlines_catchupSelection':
+ Headlines.catchupSelection();
+ break;
+ case 'article_selectionSetScore':
+ Article.selectionSetScore();
+ break;
+ case 'headlines_deleteSelection':
+ Headlines.deleteSelection();
+ break;
+ default:
+ if (!PluginHost.run_until(PluginHost.HOOK_HEADLINE_TOOLBAR_SELECT_MENU_ITEM2, true, action))
+ console.warn('unknown headlines action', action);
+ }
+ }
+ );
},
onLoaded: function (reply, offset, append) {
console.log("Headlines.onLoaded: offset=", offset, "append=", append);
@@ -1501,6 +1559,48 @@ const Headlines = {
menu.startup();
}
+ /* vfeed menu */
+
+ if (!dijit.byId("vfeedMenu")) {
+
+ const menu = new dijit.Menu({
+ id: "vfeedMenu",
+ targetNodeIds: ["headlines-frame"],
+ selector: ".vfeedMenuAttach"
+ });
+
+ menu.addChild(new dijit.MenuItem({
+ label: __("Mark as read"),
+ onClick: function() {
+ Feeds.catchupFeed(this.getParent().currentTarget.getAttribute("data-feed-id"));
+ }}));
+
+ menu.addChild(new dijit.MenuItem({
+ label: __("Edit feed"),
+ onClick: function() {
+ CommonDialogs.editFeed(this.getParent().currentTarget.getAttribute("data-feed-id"), false);
+ }}));
+
+ menu.addChild(new dijit.MenuItem({
+ label: __("Open site"),
+ onClick: function() {
+ App.postOpenWindow("backend.php", {op: "feeds", method: "opensite",
+ feed_id: this.getParent().currentTarget.getAttribute("data-feed-id"), csrf_token: __csrf_token});
+ }}));
+
+ menu.addChild(new dijit.MenuSeparator());
+
+ menu.addChild(new dijit.MenuItem({
+ label: __("Debug feed"),
+ onClick: function() {
+ /* global __csrf_token */
+ App.postOpenWindow("backend.php", {op: "feeds", method: "updatedebugger",
+ feed_id: this.getParent().currentTarget.getAttribute("data-feed-id"), csrf_token: __csrf_token});
+ }}));
+
+ menu.startup();
+ }
+
/* vgroup feed title menu */
if (!dijit.byId("headlinesFeedTitleMenu")) {