mirror of
https://github.com/Athou/commafeed.git
synced 2026-03-21 21:37:29 +00:00
bootstrap3
This commit is contained in:
@@ -7,42 +7,31 @@
|
||||
</div>
|
||||
<div class="category-link" ng-click="categoryClicked(node.id, node.isTag)" ng-dblclick="showCategoryDetails(node.id, node.isTag)">
|
||||
<span class="fldr">
|
||||
<i ng-class="{'icon-caret-right': !node.expanded, 'icon-caret-down': node.expanded}" ng-click="toggleCategory(node, $event)" ng-show="showChildren"></i>
|
||||
<i ng-class="{'icon-caret-right': !node.expanded, 'icon-caret-down': node.expanded}" ng-click="toggleCategory(node, $event)"
|
||||
ng-show="showChildren"></i>
|
||||
<i ng-class="{'icon-star' : node.id == 'starred', 'icon-inbox': node.id == 'all', 'icon-tag' : node.isTag}" ng-show="!showChildren"></i>
|
||||
</span>
|
||||
<span ng-class="{selected: (node.id == selectedId && (node.isTag ? selectedType == 'tag' : selectedType == 'category'))}">
|
||||
<span ng-class="{unread: unreadCount({category:node})}" class="bidi-embed">
|
||||
{{categoryLabel(node)}}
|
||||
</span>
|
||||
<span class="unread-counter">
|
||||
{{categoryCountLabel(node)}}
|
||||
</span>
|
||||
<span ng-class="{unread: unreadCount({category:node})}" class="bidi-embed"> {{categoryLabel(node)}} </span>
|
||||
<span class="unread-counter"> {{categoryCountLabel(node)}} </span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<ul ng-show="node.expanded && showChildren">
|
||||
<recursive>
|
||||
<category ng-repeat="child in node.children" ng-show="settingsService.settings.showRead == true || unreadCount({category:node}) > 0"
|
||||
node="child" level="level + 1" selected-type="selectedType"
|
||||
selected-id="selectedId" show-label="true" show-children="true"
|
||||
unread-count="unreadCount({category:category})">
|
||||
</category>
|
||||
</recursive>
|
||||
<recursive> <category ng-repeat="child in node.children"
|
||||
ng-show="settingsService.settings.showRead == true || unreadCount({category:node}) > 0" node="child" level="level + 1"
|
||||
selected-type="selectedType" selected-id="selectedId" show-label="true" show-children="true"
|
||||
unread-count="unreadCount({category:category})"> </category> </recursive>
|
||||
<li ng-repeat="feed in node.feeds" ng-class="getClass(level)" class="tree-item" draggable="feed" droppable="feed"
|
||||
ng-show="settingsService.settings.showRead == true || feed.unread > 0">
|
||||
<div class="pull-right" ng-click="showFeedDetails(feed)">
|
||||
<i class="icon-wrench config pointer"></i>
|
||||
</div>
|
||||
<a ng-click="feedClicked(feed.id, $event)" ng-dblclick="showFeedDetails(feed)" class="feed-link"
|
||||
href="{{feed.feedLink}}" target="_blank"
|
||||
<a ng-click="feedClicked(feed.id, $event)" ng-dblclick="showFeedDetails(feed)" class="feed-link" href="{{feed.feedLink}}" target="_blank"
|
||||
ng-class="{error: feed.message && feed.errorCount > 10, selected: (feed.id == selectedId && selectedType == 'feed') }">
|
||||
<favicon url="feed.iconUrl" />
|
||||
<span ng-class="{unread: feed.unread}" class="bidi-embed">
|
||||
{{feed.name}}
|
||||
</span>
|
||||
<span class="unread-counter">
|
||||
{{feedCountLabel(feed)}}
|
||||
</span>
|
||||
<span ng-class="{unread: feed.unread}" class="bidi-embed"> {{feed.name}} </span>
|
||||
<span class="unread-counter"> {{feedCountLabel(feed)}} </span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -1,19 +1,17 @@
|
||||
<div ng-controller="FeedSearchCtrl">
|
||||
<div modal="feedSearchModal" close="close()"
|
||||
options="{dialogClass: 'modal feed-search-dialog'}">
|
||||
<div modal="feedSearchModal" close="close()" options="{dialogClass: 'modal feed-search-dialog'}">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" ng-click="close()">×</button>
|
||||
<h4>
|
||||
<input ng-model="filter" class="filter-input"
|
||||
ui-keydown="{'up': 'focusPrevious($event)', 'down': 'focusNext($event)', 'enter': 'openFocused()' }"
|
||||
placeholder="${feedsearch.hint}" focus="feedSearchModal">
|
||||
<input ng-model="filter" class="filter-input"
|
||||
ui-keydown="{'up': 'focusPrevious($event)', 'down': 'focusNext($event)', 'enter': 'openFocused()' }" placeholder="${feedsearch.hint}"
|
||||
focus="feedSearchModal">
|
||||
</h4>
|
||||
<small>${feedsearch.help}</small>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<strong>${feedsearch.result_prefix}</strong>
|
||||
<span
|
||||
ng-repeat="feed in (filtered = (CategoryService.feeds | filter:{name: filter} | limitTo:40))">
|
||||
<span ng-repeat="feed in (filtered = (CategoryService.feeds | filter:{name: filter} | limitTo:40))">
|
||||
<span ng-class="{block: filter, focus: focus.id == feed.id}" class="feed-link">
|
||||
<a class=" pointer" ng-click="goToFeed(feed.id)">
|
||||
<favicon url="feed.iconUrl" />
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
<div ng-controller="FooterController">
|
||||
<iframe ng-if="subToMeUrl" style="display:none;" ng-src='{{subToMeUrl}}'></iframe>
|
||||
<iframe ng-if="subToMeUrl" style="display: none;" ng-src='{{subToMeUrl}}'></iframe>
|
||||
</div>
|
||||
@@ -3,7 +3,7 @@
|
||||
<dl class="dl-horizontal">
|
||||
<dt>Mean</dt>
|
||||
<dd>{{metric.meanRate | number:2}}</dd>
|
||||
|
||||
|
||||
<dt>1 min</dt>
|
||||
<dd>{{metric.oneMinuteRate | number:2}}</dd>
|
||||
|
||||
@@ -12,9 +12,9 @@
|
||||
|
||||
<dt>15 min</dt>
|
||||
<dd>{{metric.fifteenMinuteRate | number:2}}</dd>
|
||||
|
||||
|
||||
<dt>Total</dt>
|
||||
<dd>{{metric.count}}</dd>
|
||||
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
@@ -4,19 +4,19 @@
|
||||
|
||||
<dt>k</dt>
|
||||
<dd>${about.shortcuts.open_previous_entry}</dd>
|
||||
|
||||
|
||||
<dt>${about.shortcuts.spacebar}</dt>
|
||||
<dd>${about.shortcuts.move_page_down_up}</dd>
|
||||
|
||||
|
||||
<dt>n</dt>
|
||||
<dd>${about.shortcuts.focus_next_entry}</dd>
|
||||
|
||||
<dt>p</dt>
|
||||
<dd>${about.shortcuts.focus_previous_entry}</dd>
|
||||
|
||||
|
||||
<dt>shift+j,shift+n</dt>
|
||||
<dd>${about.shortcuts.open_next_feed}</dd>
|
||||
|
||||
|
||||
<dt>shift+k,shift+p</dt>
|
||||
<dd>${about.shortcuts.open_previous_feed}</dd>
|
||||
|
||||
@@ -25,35 +25,47 @@
|
||||
|
||||
<dt>v</dt>
|
||||
<dd>${about.shortcuts.open_current_entry_in_new_window}</dd>
|
||||
|
||||
|
||||
<dt>b</dt>
|
||||
<dd>${about.shortcuts.open_current_entry_in_new_window_background}</dd>
|
||||
|
||||
|
||||
<dt>s</dt>
|
||||
<dd>${about.shortcuts.star_unstar}</dd>
|
||||
|
||||
|
||||
<dt>m</dt>
|
||||
<dd>${about.shortcuts.mark_current_entry}</dd>
|
||||
|
||||
|
||||
<dt>shift+a</dt>
|
||||
<dd>${about.shortcuts.mark_all_as_read}</dd>
|
||||
|
||||
<dt>${about.shortcuts.mouse_middleclick}</dt>
|
||||
<dd>${about.shortcuts.open_in_new_tab_mark_as_read}</dd>
|
||||
|
||||
|
||||
<dt>f</dt>
|
||||
<dd>${about.shortcuts.fullscreen}</dd>
|
||||
|
||||
|
||||
<dt>+,-</dt>
|
||||
<dd>${about.shortcuts.font_size}</dd>
|
||||
|
||||
<dt>g <i class="icon-arrow-right"></i> a</dt>
|
||||
|
||||
<dt>
|
||||
g
|
||||
<i class="icon-arrow-right"></i>
|
||||
a
|
||||
</dt>
|
||||
<dd>${about.shortcuts.go_to_all}</dd>
|
||||
|
||||
<dt>g <i class="icon-arrow-right"></i> s</dt>
|
||||
|
||||
<dt>
|
||||
g
|
||||
<i class="icon-arrow-right"></i>
|
||||
s
|
||||
</dt>
|
||||
<dd>${about.shortcuts.go_to_starred}</dd>
|
||||
|
||||
<dt>g <i class="icon-arrow-right"></i> u</dt>
|
||||
|
||||
<dt>
|
||||
g
|
||||
<i class="icon-arrow-right"></i>
|
||||
u
|
||||
</dt>
|
||||
<dd>${about.shortcuts.feed_search}</dd>
|
||||
|
||||
|
||||
</dl>
|
||||
@@ -1,109 +0,0 @@
|
||||
<div ng-controller="SubscribeCtrl">
|
||||
|
||||
<div class="btn-group">
|
||||
<button class="btn" ng-click="open()"><span class="icon-rss"></span> ${tree.subscribe}</button>
|
||||
<button class="btn dropdown-toggle" data-toggle="dropdown">
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a ng-click="openImport()"><i class="icon-arrow-down"></i> ${tree.import}</a></li>
|
||||
<li><a ng-click="openCategory()"><i class="icon-plus"></i> ${tree.new_category}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn" ng-click="MobileService.toggleLeftMenu()" ng-if="MobileService.mobile">
|
||||
<i class="icon-remove"></i> ${global.close}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div modal="isOpen" close="close()" options="opts">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" ng-click="close()">×</button>
|
||||
<h4>${tree.subscribe}</h4>
|
||||
</div>
|
||||
<form name="subscribeForm" class="form-horizontal" ng-submit="save()">
|
||||
<div class="modal-body">
|
||||
<div class="control-group" ng-class="{error : !subscribeForm.url.$valid}">
|
||||
<label class="control-label">${subscribe.feed_url}</label>
|
||||
<div class="controls">
|
||||
<input type="text" name="url" ng-model="sub.url" ng-blur="urlChanged()" placeholder="http://example.com/feed"
|
||||
class="input-block-level" required ng-disabled="state=='loading'" focus="isOpen"></input>
|
||||
<span class="help-block" ng-show="!subscribeForm.url.$valid">${global.required}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group" ng-class="{error : !subscribeForm.title.$valid}">
|
||||
<label class="control-label">${subscribe.feed_name}</label>
|
||||
<div class="controls">
|
||||
<input type="text" name="title" ng-model="sub.title"
|
||||
class="input-block-level" required ng-disabled="state=='loading'"></input>
|
||||
<span class="help-block" ng-show="!subscribeForm.title.$valid">${global.required}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group" ng-class="{error : !subscribeForm.category.$valid}">
|
||||
<label class="control-label">${subscribe.category}</label>
|
||||
<div class="controls">
|
||||
<select name="category" ng-model="sub.categoryId" class="input-block-level"
|
||||
ng-options="cat.id as cat.name for cat in CategoryService.flatCategories" required>
|
||||
</select>
|
||||
<span class="help-block" ng-show="!subscribeForm.category.$valid">${global.required}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn cancel" ng-click="close()" type="button">${global.cancel}</button>
|
||||
<button class="btn btn-primary ok" type="submit" ng-disabled="state!='ok'">${global.save}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div modal="isOpenImport" close="closeImport()" options="opts">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" ng-click="closeImport()">×</button>
|
||||
<h4>${tree.import}</h4>
|
||||
</div>
|
||||
<form class="form-horizontal" action="rest/feed/import" method="post" enctype="multipart/form-data">
|
||||
<div class="modal-body">
|
||||
<div class="control-group">
|
||||
<label class="control-label">${import.xml_file}</label>
|
||||
<div class="controls">
|
||||
<input type="file" name="file"></input>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn cancel" ng-click="closeImport()">${global.cancel}</button>
|
||||
<button class="btn btn-primary ok" type="submit">${tree.import}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div modal="isOpenCategory" close="closeCategory()" options="opts">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" ng-click="closeCategory()">×</button>
|
||||
<h4>${tree.new_category}</h4>
|
||||
</div>
|
||||
<form name="categoryForm" class="form-horizontal" ng-submit="saveCategory()">
|
||||
<div class="modal-body">
|
||||
<div class="control-group" ng-class="{error : !categoryForm.name.$valid}">
|
||||
<label class="control-label">${new_category.name}</label>
|
||||
<div class="controls">
|
||||
<input type="text" name="name" ng-model="cat.name" required></input>
|
||||
<span class="help-block" ng-show="!categoryForm.name.$valid">${global.required}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group" ng-class="{error : !categoryForm.category.$valid}">
|
||||
<label class="control-label">${new_category.parent}</label>
|
||||
<div class="controls">
|
||||
<select name="category" ng-model="cat.parentId" class="input-block-level"
|
||||
ng-options="cat.id as cat.name for cat in CategoryService.flatCategories"required>
|
||||
</select>
|
||||
<span class="help-block" ng-show="!categoryForm.category.$valid">${global.required}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn cancel" ng-click="closeCategory()">${global.cancel}</button>
|
||||
<button class="btn btn-primary ok" type="submit">${global.save}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,84 +1,132 @@
|
||||
<div ng-controller="ToolbarCtrl">
|
||||
<div class="form-horizontal">
|
||||
<div class="btn-group" ng-if="MobileService.mobile">
|
||||
<button type="button" class="btn" ng-click="MobileService.toggleLeftMenu()">
|
||||
<button type="button" class="btn btn-default" ng-click="MobileService.toggleLeftMenu()">
|
||||
<i class="icon-list-alt"></i>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="btn-group">
|
||||
<a type="button" class="btn" ng-click="previousEntry()" title="${toolbar.previous_entry}"><i class="icon-chevron-up"></i></a>
|
||||
<a type="button" class="btn" ng-click="nextEntry()" title="${toolbar.next_entry}"><i class="icon-chevron-down"></i></a>
|
||||
<a type="button" class="btn btn-default" ng-click="previousEntry()" title="${toolbar.previous_entry}">
|
||||
<i class="icon-chevron-up"></i>
|
||||
</a>
|
||||
<a type="button" class="btn btn-default" ng-click="nextEntry()" title="${toolbar.next_entry}">
|
||||
<i class="icon-chevron-down"></i>
|
||||
</a>
|
||||
<div class="btn-group">
|
||||
<a type="button" class="btn" ng-click="refresh()" title="${toolbar.refresh}"><i class="icon-refresh"></i></a>
|
||||
<button class="btn dropdown-toggle" data-toggle="dropdown">
|
||||
<a type="button" class="btn btn-default" ng-click="refresh()" title="${toolbar.refresh}">
|
||||
<i class="icon-refresh"></i>
|
||||
</a>
|
||||
<button class="btn btn-default dropdown-toggle" data-toggle="dropdown">
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu pull-right">
|
||||
<li><a ng-click="refreshAll()">${toolbar.refresh_all}</a></li>
|
||||
<li>
|
||||
<a ng-click="refreshAll()">${toolbar.refresh_all}</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="btn-group">
|
||||
<a type="button" class="btn" ng-click="markAllAsRead()" title="${toolbar.mark_all_as_read}"><i class="icon-ok"></i></a>
|
||||
<button class="btn dropdown-toggle" data-toggle="dropdown">
|
||||
<a type="button" class="btn btn-default" ng-click="markAllAsRead()" title="${toolbar.mark_all_as_read}">
|
||||
<i class="icon-ok"></i>
|
||||
</a>
|
||||
<button class="btn btn-default dropdown-toggle" data-toggle="dropdown">
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu pull-right">
|
||||
<li><a ng-click="markAll12Hours()">${toolbar.mark_all_older_12_hours}</a></li>
|
||||
<li><a ng-click="markAllDay()">${toolbar.mark_all_older_day}</a></li>
|
||||
<li><a ng-click="markAllWeek()">${toolbar.mark_all_older_week}</a></li>
|
||||
<li><a ng-click="markAllTwoWeeks()">${toolbar.mark_all_older_two_weeks}</a></li>
|
||||
<li>
|
||||
<a ng-click="markAll12Hours()">${toolbar.mark_all_older_12_hours}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a ng-click="markAllDay()">${toolbar.mark_all_older_day}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a ng-click="markAllWeek()">${toolbar.mark_all_older_week}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a ng-click="markAllTwoWeeks()">${toolbar.mark_all_older_two_weeks}</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="btn-group toolbar-expand" ng-if="MobileService.mobile">
|
||||
<button type="button" class="btn" ng-click="MobileService.toggleRightMenu()">
|
||||
<button type="button" class="btn btn-default" ng-click="MobileService.toggleRightMenu()">
|
||||
<i ng-class="{'icon-double-angle-right' : !MobileService.rightMenu, 'icon-double-angle-left': MobileService.rightMenu}"></i>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="actions btn-group">
|
||||
<div ng-if="!MobileService.mobile || MobileService.rightMenu">
|
||||
<div class="btn-group read-mode" data-toggle="buttons-radio">
|
||||
<button type="button" class="btn" ng-model="settingsService.settings.readingMode" btn-radio="'unread'">${toolbar.unread}</button>
|
||||
<button type="button" class="btn" ng-model="settingsService.settings.readingMode" btn-radio="'all'">${toolbar.all}</button>
|
||||
<button type="button" class="btn btn-default" ng-model="settingsService.settings.readingMode" btn-radio="'unread'">${toolbar.unread}</button>
|
||||
<button type="button" class="btn btn-default" ng-model="settingsService.settings.readingMode" btn-radio="'all'">${toolbar.all}</button>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="btn-group">
|
||||
<a type="button" class="btn" ng-click="toggleOrder()" title="${toolbar.sort_by_asc_desc}">
|
||||
<i ng-class="{'icon-arrow-up' : settingsService.settings.readingOrder == 'asc', 'icon-arrow-down': settingsService.settings.readingOrder == 'desc'}"></i>
|
||||
<a type="button" class="btn btn-default" ng-click="toggleOrder()" title="${toolbar.sort_by_asc_desc}">
|
||||
<i
|
||||
ng-class="{'icon-arrow-up' : settingsService.settings.readingOrder == 'asc', 'icon-arrow-down': settingsService.settings.readingOrder == 'desc'}"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="btn-group" data-toggle="buttons-radio">
|
||||
<a type="button" class="btn" ng-model="settingsService.settings.viewMode" btn-radio="'title'" title="${toolbar.titles_only}"><i class="icon-list"></i></a>
|
||||
<a type="button" class="btn" ng-model="settingsService.settings.viewMode" btn-radio="'expanded'" title="${toolbar.expanded_view}"><i class="icon-th-list"></i></a>
|
||||
<a type="button" class="btn btn-default" ng-model="settingsService.settings.viewMode" btn-radio="'title'"
|
||||
title="${toolbar.titles_only}">
|
||||
<i class="icon-list"></i>
|
||||
</a>
|
||||
<a type="button" class="btn btn-default" ng-model="settingsService.settings.viewMode" btn-radio="'expanded'"
|
||||
title="${toolbar.expanded_view}">
|
||||
<i class="icon-th-list"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="btn-group">
|
||||
<a class="btn" ng-click="toSettings()" title="${toolbar.settings}"><i class="icon-cog"></i></a>
|
||||
<button class="btn dropdown-toggle" data-toggle="dropdown">
|
||||
<a class="btn btn-default" ng-click="toSettings()" title="${toolbar.settings}">
|
||||
<i class="icon-cog"></i>
|
||||
</a>
|
||||
<button class="btn btn-default dropdown-toggle" data-toggle="dropdown">
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu pull-right">
|
||||
<li><a ng-click="toProfile()"><i class="icon-user"></i> ${toolbar.profile}</a></li>
|
||||
<li ng-show="session.admin"><a ng-click="toAdmin()"><i class="icon-edit"></i> ${toolbar.admin}</a></li>
|
||||
<li>
|
||||
<a ng-click="toProfile()">
|
||||
<i class="icon-user"></i>
|
||||
${toolbar.profile}
|
||||
</a>
|
||||
</li>
|
||||
<li ng-show="session.admin">
|
||||
<a ng-click="toAdmin()">
|
||||
<i class="icon-edit"></i>
|
||||
${toolbar.admin}
|
||||
</a>
|
||||
</li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="logout"><i class="icon-off"></i> ${toolbar.logout}</a></li>
|
||||
<li>
|
||||
<a href="logout">
|
||||
<i class="icon-off"></i>
|
||||
${toolbar.logout}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<form ng-submit="search()" class="btn-group input-append" ng-if="!MobileService.mobile">
|
||||
<input type="text" ng-model="keywords"></input>
|
||||
<button class="btn" type="submit"><i class="icon-search"></i></button>
|
||||
</form>
|
||||
<div class="btn-group">
|
||||
<form ng-submit="search()" class="input-group keywords" ng-if="!MobileService.mobile">
|
||||
<input type="text" class="form-control" ng-model="keywords"></input>
|
||||
<span class="input-group-btn">
|
||||
<button class="btn btn-default" type="submit">
|
||||
<i class="icon-search"></i>
|
||||
</button>
|
||||
</span>
|
||||
</form>
|
||||
</div>
|
||||
<div class="btn-group donate">
|
||||
<a class="btn btn-success" type="button" ng-click="toHelp()" title="${toolbar.about} / ${toolbar.donate}">
|
||||
<i class="icon-info-sign"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div spinner shown="loading"></div>
|
||||
|
||||
@@ -1,15 +1,48 @@
|
||||
<div class="css-treeview" ng-controller="CategoryTreeCtrl">
|
||||
<ul>
|
||||
<category node="CategoryService.subscriptions" show-label="'${tree.all}'" show-children="false" level="0" selected-type="selectedType"
|
||||
selected-id="selectedId" unread-count="unreadCount(category)"> </category>
|
||||
<category node="starred" show-label="'${tree.starred}'" show-children="false" level="0" selected-type="selectedType"
|
||||
selected-id="selectedId" unread-count="unreadCount(category)"> </category>
|
||||
<category node="CategoryService.subscriptions" show-label="false" show-children="true" level="0" selected-type="selectedType"
|
||||
selected-id="selectedId" unread-count="unreadCount(category)"> </category>
|
||||
<div>
|
||||
<div class="btn-group">
|
||||
<button class="btn btn-default" ui-sref="feeds.subscribe">
|
||||
<span class="icon-rss"></span>
|
||||
${tree.subscribe}
|
||||
</button>
|
||||
<button class="btn btn-default dropdown-toggle" data-toggle="dropdown">
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li>
|
||||
<a ui-sref="feeds.new_category">
|
||||
<i class="icon-plus"></i>
|
||||
${tree.new_category}
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a ui-sref="feeds.import">
|
||||
<i class="icon-arrow-down"></i>
|
||||
${tree.import}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<li ng-repeat="tag in tags | orderBy: 'name'">
|
||||
<category node="tag" show-label="tag.name" show-children="false" level="0" selected-type="selectedType" selected-id="selectedId"
|
||||
unread-count="unreadCount(category)"> </category>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-default" ng-click="MobileService.toggleLeftMenu()" ng-if="MobileService.mobile">
|
||||
<i class="icon-remove"></i>
|
||||
${global.close}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="css-treeview" ng-controller="CategoryTreeCtrl">
|
||||
<ul>
|
||||
<category node="CategoryService.subscriptions" show-label="'${tree.all}'" show-children="false" level="0" selected-type="selectedType"
|
||||
selected-id="selectedId" unread-count="unreadCount(category)"> </category>
|
||||
<category node="starred" show-label="'${tree.starred}'" show-children="false" level="0" selected-type="selectedType"
|
||||
selected-id="selectedId" unread-count="unreadCount(category)"> </category>
|
||||
<category node="CategoryService.subscriptions" show-label="false" show-children="true" level="0" selected-type="selectedType"
|
||||
selected-id="selectedId" unread-count="unreadCount(category)"> </category>
|
||||
|
||||
<li ng-repeat="tag in tags | orderBy: 'name'">
|
||||
<category node="tag" show-label="tag.name" show-children="false" level="0" selected-type="selectedType" selected-id="selectedId"
|
||||
unread-count="unreadCount(category)"> </category>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@@ -4,10 +4,14 @@
|
||||
<metric-meter metric="metrics.meters['com.commafeed.backend.feeds.FeedRefreshUpdater.feedUpdated']" label="'Feed updated (/sec)'"></metric-meter>
|
||||
<metric-meter metric="metrics.meters['com.commafeed.backend.feeds.FeedRefreshUpdater.entryCacheHit']" label="'Entry cache hit (/sec)'"></metric-meter>
|
||||
<metric-meter metric="metrics.meters['com.commafeed.backend.feeds.FeedRefreshUpdater.entryCacheMiss']" label="'Entry cache miss (/sec)'"></metric-meter>
|
||||
|
||||
<metric-gauge metric="metrics.gauges['com.commafeed.backend.feeds.FeedRefreshExecutor.feed-refresh-updater.active']" label="'Feed Updater active'"></metric-gauge>
|
||||
<metric-gauge metric="metrics.gauges['com.commafeed.backend.feeds.FeedRefreshExecutor.feed-refresh-updater.pending']" label="'Feed Updater queued'"></metric-gauge>
|
||||
|
||||
<metric-gauge metric="metrics.gauges['com.commafeed.backend.feeds.FeedRefreshExecutor.feed-refresh-worker.active']" label="'Feed Worker active'"></metric-gauge>
|
||||
<metric-gauge metric="metrics.gauges['com.commafeed.backend.feeds.FeedRefreshExecutor.feed-refresh-worker.pending']" label="'Feed Worker queued'"></metric-gauge>
|
||||
|
||||
<metric-gauge metric="metrics.gauges['com.commafeed.backend.feeds.FeedRefreshExecutor.feed-refresh-updater.active']"
|
||||
label="'Feed Updater active'"></metric-gauge>
|
||||
<metric-gauge metric="metrics.gauges['com.commafeed.backend.feeds.FeedRefreshExecutor.feed-refresh-updater.pending']"
|
||||
label="'Feed Updater queued'"></metric-gauge>
|
||||
|
||||
<metric-gauge metric="metrics.gauges['com.commafeed.backend.feeds.FeedRefreshExecutor.feed-refresh-worker.active']"
|
||||
label="'Feed Worker active'"></metric-gauge>
|
||||
<metric-gauge metric="metrics.gauges['com.commafeed.backend.feeds.FeedRefreshExecutor.feed-refresh-worker.pending']"
|
||||
label="'Feed Worker queued'"></metric-gauge>
|
||||
</div>
|
||||
@@ -10,182 +10,171 @@
|
||||
|
||||
<div>
|
||||
<form name="settingsForm" class="form-horizontal" ng-submit="save()">
|
||||
<div class="row-fluid">
|
||||
<div class="span6">
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="publicUrl">Public URL</label>
|
||||
<div class="controls">
|
||||
<input type="text" id="publicUrl" name="publicUrl" class="input-block-level"
|
||||
placeholder="http://localhost:8082/commafeed" ng-model="settings.publicUrl" />
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" for="publicUrl">Public URL</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="text" id="publicUrl" name="publicUrl" class="form-control" placeholder="http://localhost:8082/commafeed"
|
||||
ng-model="settings.publicUrl" />
|
||||
<span class="help-block">The URL in your address bar right now, up to the # (not included)</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="allowRegistrations">Allow
|
||||
registrations</label>
|
||||
<div class="controls">
|
||||
<input type="checkbox" id="allowRegistrations" class="input-block-level"
|
||||
name="allowRegistrations" ng-model="settings.allowRegistrations" />
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" for="publicUrl">Allow registrations</label>
|
||||
<div class="col-sm-9">
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" id="allowRegistrations" name="allowRegistrations" ng-model="settings.allowRegistrations" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="feedbackButton">Feedback
|
||||
button</label>
|
||||
<div class="controls">
|
||||
<input type="checkbox" id="feedbackButton" name="feedbackButton"
|
||||
class="input-block-level" ng-model="settings.feedbackButton" />
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" for="feedbackButton">Feedback button</label>
|
||||
<div class="col-sm-9">
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" id="feedbackButton" name="feedbackButton" ng-model="settings.feedbackButton" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="googleClientId">Google
|
||||
client ID</label>
|
||||
<div class="controls">
|
||||
<input type="text" name="googleClientId" class="input-block-level"
|
||||
ng-model="settings.googleClientId" />
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" for="googleClientId">Google client ID</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="text" name="googleClientId" class="form-control" ng-model="settings.googleClientId" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="googleClientSecret">Google
|
||||
client secret</label>
|
||||
<div class="controls">
|
||||
<input type="text" name="googleClientSecret" class="input-block-level"
|
||||
ng-model="settings.googleClientSecret" />
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" for="googleClientSecret">Google client secret</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="text" name="googleClientSecret" class="form-control" ng-model="settings.googleClientSecret" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="googleAnalyticsTrackingCode">Google
|
||||
Analytics tracking code</label>
|
||||
<div class="controls">
|
||||
<input type="text" name="googleAnalyticsTrackingCode" class="input-block-level"
|
||||
ng-model="settings.googleAnalyticsTrackingCode" />
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" for="googleAnalyticsTrackingCode">Google Analytics tracking code</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="text" name="googleAnalyticsTrackingCode" class="form-control" ng-model="settings.googleAnalyticsTrackingCode" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="googleClientSecret">Background HTTP
|
||||
threads</label>
|
||||
<div class="controls">
|
||||
<input type="number" name="backgroundThreads" class="input-block-level"
|
||||
ng-model="settings.backgroundThreads" />
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" for="googleClientSecret">Background HTTP threads</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="number" name="backgroundThreads" class="form-control" ng-model="settings.backgroundThreads" />
|
||||
<span class="help-inline">Requires restart</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="databaseUpdateThreads">Database update
|
||||
threads</label>
|
||||
<div class="controls">
|
||||
<input type="number" name="databaseUpdateThreads" class="input-block-level"
|
||||
ng-model="settings.databaseUpdateThreads" />
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" for="databaseUpdateThreads">Database update threads</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="number" name="databaseUpdateThreads" class="form-control" ng-model="settings.databaseUpdateThreads" />
|
||||
<span class="help-inline">Requires restart</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="announcement">Announcement</label>
|
||||
<div class="controls">
|
||||
<textarea name="announcement" rows="10" class="input-block-level"
|
||||
ng-model="settings.announcement">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" for="announcement">Announcement</label>
|
||||
<div class="col-sm-9">
|
||||
<textarea name="announcement" rows="10" class="form-control" ng-model="settings.announcement">
|
||||
</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="span6">
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="announcement">SMTP Host</label>
|
||||
<div class="controls">
|
||||
<input type="text" name="smtpHost" class="input-block-level"
|
||||
ng-model="settings.smtpHost" />
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" for="announcement">SMTP Host</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="text" name="smtpHost" class="form-control" ng-model="settings.smtpHost" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="announcement">SMTP Port</label>
|
||||
<div class="controls">
|
||||
<input type="text" name="smtpPort" class="input-block-level"
|
||||
ng-model="settings.smtpPort" />
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" for="announcement">SMTP Port</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="text" name="smtpPort" class="form-control" ng-model="settings.smtpPort" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="smtpTls">SMTP TLS </label>
|
||||
<div class="controls">
|
||||
<input type="checkbox" name="smtpTls" class="input-block-level"
|
||||
ng-model="settings.smtpTls" />
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" for="smtpTls">SMTP TLS </label>
|
||||
<div class="col-sm-9">
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" name="smtpTls" ng-model="settings.smtpTls" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="smtpUserName">SMTP
|
||||
Username</label>
|
||||
<div class="controls">
|
||||
<input type="text" name="smtpUserName" class="input-block-level"
|
||||
ng-model="settings.smtpUserName" />
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" for="smtpUserName">SMTP Username</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="text" name="smtpUserName" class="form-control" ng-model="settings.smtpUserName" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="smtpPassword">SMTP
|
||||
Password</label>
|
||||
<div class="controls">
|
||||
<input type="password" name="smtpPassword" class="input-block-level"
|
||||
ng-model="settings.smtpPassword" />
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" for="smtpPassword">SMTP Password</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="password" name="smtpPassword" class="form-control" ng-model="settings.smtpPassword" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="heavyLoad">Heavy load</label>
|
||||
<div class="controls">
|
||||
<input type="checkbox" name="heavyLoad" ng-model="settings.heavyLoad" />
|
||||
<span class="help-block">Don't use this unless you know what you're doing!</span>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" for="heavyLoad">Heavy load</label>
|
||||
<div class="col-sm-9">
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" name="heavyLoad" ng-model="settings.heavyLoad" />
|
||||
<span class="help-block">Don't use this unless you know what you're doing!</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="pubsubhubbub">PubSubHubbub</label>
|
||||
<div class="controls">
|
||||
<input type="checkbox" name="pubsubhubbub" ng-model="settings.pubsubhubbub" />
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" for="pubsubhubbub">PubSubHubbub</label>
|
||||
<div class="col-sm-9">
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" name="pubsubhubbub" ng-model="settings.pubsubhubbub" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="imageProxyEnabled">Proxy entry images</label>
|
||||
<div class="controls">
|
||||
<input type="checkbox" name="imageProxyEnabled" ng-model="settings.imageProxyEnabled" />
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" for="imageProxyEnabled">Proxy entry images</label>
|
||||
<div class="col-sm-9">
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" name="imageProxyEnabled" ng-model="settings.imageProxyEnabled" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="logLevel">Logging level</label>
|
||||
<div class="controls">
|
||||
<select name="logLevel" ng-model="settings.logLevel" class="input-block-level"
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" for="logLevel">Logging level</label>
|
||||
<div class="col-sm-9">
|
||||
<select name="logLevel" ng-model="settings.logLevel" class="form-control"
|
||||
ng-options="level for level in ['DEBUG', 'INFO', 'WARN', 'ERROR']">
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="logLevel">Database query timeout (ms)</label>
|
||||
<div class="controls">
|
||||
<input type="number" name="queryTimeout" class="input-block-level"
|
||||
ng-model="settings.queryTimeout" />
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" for="logLevel">Database query timeout (ms)</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="number" name="queryTimeout" class="form-control" ng-model="settings.queryTimeout" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="keepStatusDays">Keep read status for (days)</label>
|
||||
<div class="controls">
|
||||
<input type="number" name="keepStatusDays" class="input-block-level"
|
||||
ng-model="settings.keepStatusDays" />
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" for="keepStatusDays">Keep read status for (days)</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="number" name="keepStatusDays" class="form-control" ng-model="settings.keepStatusDays" />
|
||||
<span class="help-inline">0 = keep forever</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="refreshIntervalMinutes">Refresh feeds every (minutes)</label>
|
||||
<div class="controls">
|
||||
<input type="number" name="refreshIntervalMinutes" class="input-block-level" min="1"
|
||||
ng-model="settings.refreshIntervalMinutes" />
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" for="refreshIntervalMinutes">Refresh feeds every (minutes)</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="number" name="refreshIntervalMinutes" class="form-control" min="1" ng-model="settings.refreshIntervalMinutes" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="crawlingPaused">Pause crawling</label>
|
||||
<div class="controls">
|
||||
<input type="checkbox" name="crawlingPaused" ng-model="settings.crawlingPaused" />
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" for="crawlingPaused">Pause crawling</label>
|
||||
<div class="col-sm-9">
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" name="crawlingPaused" ng-model="settings.crawlingPaused" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<button type="button" class="btn" ng-click="cancel()">Cancel</button>
|
||||
<div class="row">
|
||||
<div class="text-center form-group">
|
||||
<button type="submit" class="btn btn-primary">Save</button>
|
||||
<button type="button" class="btn btn-default" ng-click="cancel()">Cancel</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@@ -3,42 +3,37 @@
|
||||
<h1>Add user</h1>
|
||||
</div>
|
||||
|
||||
<alert ng-repeat="alert in alerts" type="alert.type"
|
||||
close="closeAlert($index)">{{alert.msg}}</alert>
|
||||
<alert ng-repeat="alert in alerts" type="alert.type" close="closeAlert($index)">{{alert.msg}}</alert>
|
||||
|
||||
<form name="userAddForm" class="form-horizontal" ng-submit="save()">
|
||||
<div class="control-group"
|
||||
ng-class="{error : !userAddForm.name.$valid}">
|
||||
<label class="control-label" for="name">User name</label>
|
||||
<div class="controls">
|
||||
<input type="text" id="name" name="name" ng-model="user.name"
|
||||
required />
|
||||
<div class="form-group" ng-class="{error : !userAddForm.name.$valid}">
|
||||
<label class="col-sm-2 control-label" for="name">User name</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" id="name" name="name" ng-model="user.name" required class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group"
|
||||
ng-class="{error : !userAddForm.password.$valid}">
|
||||
<label class="control-label" for="password">Password</label>
|
||||
<div class="controls">
|
||||
<input type="password" id="password" name="password"
|
||||
ng-model="user.password" required />
|
||||
<div class="form-group" ng-class="{error : !userAddForm.password.$valid}">
|
||||
<label class="col-sm-2 control-label" for="password">Password</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="password" id="password" name="password" class="form-control" ng-model="user.password" required />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="admin">Admin</label>
|
||||
<div class="controls">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="admin">Admin</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="checkbox" name="admin" ng-model="user.admin" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="enabled">Enabled</label>
|
||||
<div class="controls">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="enabled">Enabled</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="checkbox" name="enabled" ng-model="user.enabled" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<button type="button" class="btn" ng-click="cancel()">Cancel</button>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-2 col-sm-10">
|
||||
<button type="submit" class="btn btn-primary">Save</button>
|
||||
<button type="button" class="btn btn-default" ng-click="cancel()">Cancel</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@@ -3,51 +3,45 @@
|
||||
<h1>Edit user</h1>
|
||||
</div>
|
||||
|
||||
<alert ng-repeat="alert in alerts" type="alert.type"
|
||||
close="closeAlert($index)">{{alert.msg}}</alert>
|
||||
<alert ng-repeat="alert in alerts" type="alert.type" close="closeAlert($index)">{{alert.msg}}</alert>
|
||||
|
||||
<form name="userAddForm" class="form-horizontal" ng-submit="save()">
|
||||
<div class="control-group"
|
||||
ng-class="{error : !userAddForm.name.$valid}">
|
||||
<label class="control-label" for="name">User name</label>
|
||||
<div class="controls">
|
||||
<input type="text" id="name" name="name" ng-model="user.name"
|
||||
required />
|
||||
<div class="form-group" ng-class="{error : !userAddForm.name.$valid}">
|
||||
<label class="col-sm-2 control-label" for="name">User name</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" id="name" name="name" ng-model="user.name" class="form-control" required />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group"
|
||||
ng-class="{error : !userAddForm.password.$valid}">
|
||||
<label class="control-label" for="password">Password</label>
|
||||
<div class="controls">
|
||||
<input type="password" id="password" name="password"
|
||||
ng-model="user.password" />
|
||||
<span class="help-block">Leave blank if you don't want to change the password.</span>
|
||||
<div class="form-group" ng-class="{error : !userAddForm.password.$valid}">
|
||||
<label class="col-sm-2 control-label" for="password">Password</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="password" id="password" name="password" class="form-control" ng-model="user.password" />
|
||||
<span class="help-block">Leave blank if you don't want to change the password.</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="email">Email</label>
|
||||
<div class="controls">
|
||||
<input type="text" id="email" name="email" ng-model="user.email"
|
||||
required />
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="email">Email</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" id="email" name="email" ng-model="user.email" class="form-control" required />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="admin">Admin</label>
|
||||
<div class="controls">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="admin">Admin</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="checkbox" name="admin" ng-model="user.admin" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="enabled">Enabled</label>
|
||||
<div class="controls">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="enabled">Enabled</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="checkbox" name="enabled" ng-model="user.enabled" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<button type="button" class="btn" ng-click="cancel()">Cancel</button>
|
||||
<button type="button" class="btn btn-danger" ng-click="remove()">Delete</button>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-2 col-sm-10">
|
||||
<button type="submit" class="btn btn-primary">Save</button>
|
||||
<button type="button" class="btn btn-danger" ng-click="remove()">Delete</button>
|
||||
<button type="button" class="btn btn-default" ng-click="cancel()">Cancel</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
|
||||
<div>
|
||||
<div class="button-bar">
|
||||
<button class="btn" ng-click="addUser()">Add user</button>
|
||||
<button class="btn" ng-click="back()">Back</button>
|
||||
<button class="btn btn-default" ng-click="addUser()">Add user</button>
|
||||
<button class="btn btn-default" ng-click="back()">Back</button>
|
||||
</div>
|
||||
<div class="users-table" ng-grid="gridOptions"></div>
|
||||
</div>
|
||||
|
||||
@@ -3,43 +3,45 @@
|
||||
<h3>${details.category_details}</h3>
|
||||
</div>
|
||||
<form name="form" class="form-horizontal" ng-submit="save()">
|
||||
<div class="control-group" ng-class="{error : !form.name.$valid}" ng-if="!isMeta()">
|
||||
<label class="control-label">${details.name}</label>
|
||||
<div class="controls">
|
||||
<input type="text" name="name" ng-model="category.name" class="input-block-level" required></input>
|
||||
<div class="form-group" ng-class="{error : !form.name.$valid}" ng-if="!isMeta()">
|
||||
<label class="col-sm-2 control-label">${details.name}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="name" ng-model="category.name" class="form-control" required></input>
|
||||
<span class="help-block" ng-show="!form.name.$valid">${global.required}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group" ng-class="{error : !form.category.$valid}" ng-if="!isMeta()">
|
||||
<label class="control-label">${details.parent_category}</label>
|
||||
<div class="controls">
|
||||
<select name="category" class="input-block-level" ng-model="category.parentId"
|
||||
<div class="form-group" ng-class="{error : !form.category.$valid}" ng-if="!isMeta()">
|
||||
<label class="col-sm-2 control-label">${details.parent_category}</label>
|
||||
<div class="col-sm-10">
|
||||
<select name="category" class="form-control" ng-model="category.parentId"
|
||||
ng-options="cat.id as cat.name for cat in CategoryService.flatCategories | filter: filterCurrent">
|
||||
</select>
|
||||
<span class="help-block" ng-show="!form.category.$valid">${global.required}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group" ng-if="!isMeta()">
|
||||
<label class="control-label">${details.position}</label>
|
||||
<div class="controls">
|
||||
<input type="number" min="0" ng-model="category.position" />
|
||||
|
||||
<div class="form-group" ng-if="!isMeta()">
|
||||
<label class="col-sm-2 control-label">${details.position}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="number" min="0" ng-model="category.position" class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label">${details.feed_url}</label>
|
||||
<div class="controls horizontal-align">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label">${details.feed_url}</label>
|
||||
<div class="col-sm-10 checkbox">
|
||||
<a ng-show="user.apiKey" href="{{'rest/category/entriesAsFeed?id=' + category.id + '&apiKey=' + user.apiKey}}" target="_blank">${global.link}</a>
|
||||
<span ng-show="!user.apiKey">${details.generate_api_key_first}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-actions">
|
||||
<button type="submit" class="btn btn-primary" ng-if="!isMeta()">${global.save}</button>
|
||||
<button type="button" class="btn" ng-click="back()">${global.cancel}</button>
|
||||
<button type="button" class="btn btn-danger" ng-click="deleteCategory()" ng-if="!isMeta()">${global.delete}</button>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-2 col-sm-10">
|
||||
<button type="submit" class="btn btn-primary" ng-if="!isMeta()">${global.save}</button>
|
||||
<button type="button" class="btn btn-danger" ng-click="deleteCategory()" ng-if="!isMeta()">${global.delete}</button>
|
||||
<button type="button" class="btn btn-default" ng-click="back()">${global.cancel}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
@@ -3,76 +3,77 @@
|
||||
<h3>${details.feed_details}</h3>
|
||||
</div>
|
||||
<form name="form" class="form-horizontal" ng-submit="save()">
|
||||
<div class="control-group">
|
||||
<label class="control-label">${details.url}</label>
|
||||
<div class="controls horizontal-align">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label">${details.url}</label>
|
||||
<div class="col-sm-10 checkbox">
|
||||
<a href="{{sub.feedUrl}}" target="_blank">{{sub.feedUrl}}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">${details.website}</label>
|
||||
<div class="controls horizontal-align">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label">${details.website}</label>
|
||||
<div class="col-sm-10 checkbox">
|
||||
<a href="{{sub.feedLink}}" target="_blank">{{sub.feedLink}}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group" ng-class="{error : !form.name.$valid}">
|
||||
<label class="control-label">${details.name}</label>
|
||||
<div class="controls">
|
||||
<input type="text" name="name" ng-model="sub.name" class="input-block-level" required></input>
|
||||
<span class="help-block" ng-show="!form.name.$valid">${global.required}</span>
|
||||
<div class="form-group" ng-class="{error : !form.name.$valid}">
|
||||
<label class="col-sm-2 control-label">${details.name}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="name" ng-model="sub.name" class="form-control" required></input> <span class="help-block"
|
||||
ng-show="!form.name.$valid">${global.required}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group" ng-class="{error : !form.category.$valid}">
|
||||
<label class="control-label">${details.category}</label>
|
||||
<div class="controls">
|
||||
<select name="category" class="input-block-level" ng-model="sub.categoryId"
|
||||
<div class="form-group" ng-class="{error : !form.category.$valid}">
|
||||
<label class="col-sm-2 control-label">${details.category}</label>
|
||||
<div class="col-sm-10">
|
||||
<select name="category" class="form-control" ng-model="sub.categoryId"
|
||||
ng-options="cat.id as cat.name for cat in CategoryService.flatCategories">
|
||||
</select>
|
||||
<span class="help-block" ng-show="!form.category.$valid">${global.required}</span>
|
||||
</select> <span class="help-block" ng-show="!form.category.$valid">${global.required}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label">${details.position}</label>
|
||||
<div class="controls">
|
||||
<input type="number" min="0" ng-model="sub.position" />
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label">${details.position}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="number" min="0" ng-model="sub.position" class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label">${details.last_refresh}</label>
|
||||
<div class="controls horizontal-align">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label">${details.last_refresh}</label>
|
||||
<div class="col-sm-10 checkbox">
|
||||
<span>{{sub.lastRefresh|entryDate}}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label">${details.next_refresh}</label>
|
||||
<div class="controls horizontal-align">
|
||||
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label">${details.next_refresh}</label>
|
||||
<div class="col-sm-10 checkbox">
|
||||
<span>{{sub.nextRefresh|entryDate:"${details.queued_for_refresh}" }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label">${details.message}</label>
|
||||
<div class="controls horizontal-align">
|
||||
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label">${details.message}</label>
|
||||
<div class="col-sm-10 checkbox">
|
||||
<span>{{sub.message}}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label">${details.feed_url}</label>
|
||||
<div class="controls horizontal-align">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label">${details.feed_url}</label>
|
||||
<div class="col-sm-10 checkbox">
|
||||
<a ng-show="user.apiKey" href="{{'rest/feed/entriesAsFeed?id=' + sub.id + '&apiKey=' + user.apiKey}}" target="_blank">${global.link}</a>
|
||||
<span ng-show="!user.apiKey">${details.generate_api_key_first}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-actions">
|
||||
<button type="submit" class="btn btn-primary">${global.save}</button>
|
||||
<button type="button" class="btn" ng-click="back()">${global.cancel}</button>
|
||||
<button type="button" class="btn btn-danger" ng-click="unsubscribe()">${details.unsubscribe}</button>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-2 col-sm-10">
|
||||
<button type="submit" class="btn btn-primary">${global.save}</button>
|
||||
<button type="button" class="btn btn-danger" ng-click="unsubscribe()">${details.unsubscribe}</button>
|
||||
<button type="button" class="btn btn-default" ng-click="back()">${global.cancel}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
@@ -1,29 +1,38 @@
|
||||
<div class="row-fluid help">
|
||||
<div class="span6">
|
||||
|
||||
<div class="row help">
|
||||
<div class="col-md-6">
|
||||
|
||||
<div class="about-module">
|
||||
<h4><i class="icon-question-sign"></i> ${toolbar.about}</h4>
|
||||
<h4>
|
||||
<i class="icon-question-sign"></i>
|
||||
${toolbar.about}
|
||||
</h4>
|
||||
<p>
|
||||
${about.line1_prefix}<a href="https://github.com/Athou/commafeed" target="_blank">GitHub</a>${about.line1_suffix}
|
||||
${about.line1_prefix}
|
||||
<a href="https://github.com/Athou/commafeed" target="_blank">GitHub</a>
|
||||
${about.line1_suffix}
|
||||
</p>
|
||||
<p>
|
||||
${about.line2_prefix}<a href="https://github.com/Athou/commafeed/issues" target="_blank">GitHub</a>${about.line2_suffix}
|
||||
${about.line2_prefix}
|
||||
<a href="https://github.com/Athou/commafeed/issues" target="_blank">GitHub</a>
|
||||
${about.line2_suffix}
|
||||
</p>
|
||||
${about.version} {{infos.version}} ({{infos.gitCommit}})
|
||||
</div>
|
||||
|
||||
|
||||
<div class="about-module">
|
||||
<h4><i class="icon-money"></i> ${toolbar.donate}</h4>
|
||||
<p>
|
||||
${about.line3}
|
||||
</p>
|
||||
<form class="donate-action" action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
|
||||
<h4>
|
||||
<i class="icon-money"></i>
|
||||
${toolbar.donate}
|
||||
</h4>
|
||||
<p>${about.line3}</p>
|
||||
<form class="donate-action" action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
|
||||
<input type="hidden" name="cmd" value="_donations">
|
||||
<input type="hidden" name="business" value="9CNQHMJG2ZJVY">
|
||||
<input type="hidden" name="lc" value="US">
|
||||
<input type="hidden" name="item_name" value="CommaFeed">
|
||||
<input type="hidden" name="bn" value="PP-DonationsBF:btn_donateCC_LG.gif:NonHosted">
|
||||
<input type="image" class="donate-image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
|
||||
<input type="image" class="donate-image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit"
|
||||
alt="PayPal - The safer, easier way to pay online!">
|
||||
<input type="hidden" name="currency_code" value="USD">
|
||||
<select name="currency_code">
|
||||
<option value="EUR">Euro</option>
|
||||
@@ -33,13 +42,18 @@
|
||||
${about.line4}
|
||||
<code class="bitcoin-code">1dymfUxqCWpyD7a6rQSqNy4rLVDBsAr5e</code>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="about-module">
|
||||
<h4><i class="icon-puzzle-piece"></i> ${about.goodies}</h4>
|
||||
<h4>
|
||||
<i class="icon-puzzle-piece"></i>
|
||||
${about.goodies}
|
||||
</h4>
|
||||
<p>
|
||||
${about.goodies.android_app}:
|
||||
<a href="https://github.com/Athou/commafeed-newsplus" target="_blank">News+ extension</a>,
|
||||
<a href="https://play.google.com/store/apps/details?id=com.commafeed.commafeedreader" target="_blank">CommaFeed Reader</a>,
|
||||
<a href="https://github.com/Athou/commafeed-newsplus" target="_blank">News+ extension</a>
|
||||
,
|
||||
<a href="https://play.google.com/store/apps/details?id=com.commafeed.commafeedreader" target="_blank">CommaFeed Reader</a>
|
||||
,
|
||||
<a href="https://play.google.com/store/apps/details?id=com.mv.cloudfeedlr" target="_blank">Cloudfeedlr</a>
|
||||
</p>
|
||||
<p>
|
||||
@@ -51,62 +65,80 @@
|
||||
<p>
|
||||
<a href="https://addons.opera.com/en/extensions/details/commafeed-extension-for-opera/" target="_blank">${about.goodies.opera_extension}</a>
|
||||
</p>
|
||||
|
||||
|
||||
<p>
|
||||
${about.goodies.subscribe_url}: <a href="rest/feed/subscribe?url=FEED_URL_HERE" target="_blank">rest/feed/subscribe?url=FEED_URL_HERE</a>
|
||||
${about.goodies.subscribe_url}:
|
||||
<a href="rest/feed/subscribe?url=FEED_URL_HERE" target="_blank">rest/feed/subscribe?url=FEED_URL_HERE</a>
|
||||
</p>
|
||||
<p>
|
||||
${about.goodies.subscribe_bookmarklet}: <a href="https://www.subtome.com/settings.html" target="_blank">SubToMe</a>
|
||||
${about.goodies.subscribe_bookmarklet}:
|
||||
<a href="https://www.subtome.com/settings.html" target="_blank">SubToMe</a>
|
||||
</p>
|
||||
<p>
|
||||
${about.goodies.next_unread_bookmarklet}:
|
||||
<br />
|
||||
<br />
|
||||
${subscribe.category}
|
||||
<select ng-model="categoryId" ng-options="cat.id as cat.name for cat in CategoryService.flatCategories"
|
||||
class="bookmarklet-select">
|
||||
</select>
|
||||
${subscribe.category}
|
||||
<select ng-model="categoryId" ng-options="cat.id as cat.name for cat in CategoryService.flatCategories" class="bookmarklet-select">
|
||||
</select>
|
||||
<select ng-model="order" class="bookmarklet-select">
|
||||
<option value="desc">${about.goodies.subscribe_bookmarklet_desc}</option>
|
||||
<option value="asc">${about.goodies.subscribe_bookmarklet_asc}</option>
|
||||
</select>
|
||||
<a href="javascript:window.location.href='{{baseUrl}}next?category={{categoryId}}&order={{order}}&t='+new Date().getTime();" target="_blank">${global.link}</a>
|
||||
<a href="javascript:window.location.href='{{baseUrl}}next?category={{categoryId}}&order={{order}}&t='+new Date().getTime();"
|
||||
target="_blank">${global.link}</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="about-module">
|
||||
<h4><i class="icon-globe"></i> ${about.translation}</h4>
|
||||
<h4>
|
||||
<i class="icon-globe"></i>
|
||||
${about.translation}
|
||||
</h4>
|
||||
<p>${about.translation.message}</p>
|
||||
<p>
|
||||
${about.translation.message}
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://github.com/Athou/commafeed#translate-commafeed-into-your-language" target="_blank">
|
||||
${about.translation.link}
|
||||
</a>
|
||||
<a href="https://github.com/Athou/commafeed#translate-commafeed-into-your-language" target="_blank"> ${about.translation.link} </a>
|
||||
</p>
|
||||
</div>
|
||||
<div class="about-module">
|
||||
<h4><i class="icon-rocket"></i> ${about.rest_api}</h4>
|
||||
<p>
|
||||
${about.rest_api.line1}
|
||||
</p>
|
||||
<h4>
|
||||
<i class="icon-rocket"></i>
|
||||
${about.rest_api}
|
||||
</h4>
|
||||
<p>${about.rest_api.line1}</p>
|
||||
<p>
|
||||
<a href="api" target="_blank">${about.rest_api.link_to_documentation}</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="span6">
|
||||
<div class="col-md-6">
|
||||
<div class="about-module">
|
||||
<h4><i class="icon-keyboard"></i> ${about.keyboard_shortcuts}</h4>
|
||||
<h4>
|
||||
<i class="icon-keyboard"></i>
|
||||
${about.keyboard_shortcuts}
|
||||
</h4>
|
||||
<div ng-include="'templates/_shortcuts.html'"></div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="about-module">
|
||||
<h4><i class="icon-info-sign"></i> ${about.announcements}</h4>
|
||||
<h4>
|
||||
<i class="icon-info-sign"></i>
|
||||
${about.announcements}
|
||||
</h4>
|
||||
<a class="twitter-timeline" href="https://twitter.com/CommaFeed" data-widget-id="333897786657480704">Tweets by @CommaFeed</a>
|
||||
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
|
||||
<script>
|
||||
!function(d, s, id) {
|
||||
var js, fjs = d.getElementsByTagName(s)[0], p = /^http:/.test(d.location) ? 'http' : 'https';
|
||||
if (!d.getElementById(id)) {
|
||||
js = d.createElement(s);
|
||||
js.id = id;
|
||||
js.src = p + "://platform.twitter.com/widgets.js";
|
||||
fjs.parentNode.insertBefore(js, fjs);
|
||||
}
|
||||
}(document, "script", "twitter-wjs");
|
||||
</script>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<div class="container-fluid">
|
||||
<div class="row-fluid">
|
||||
<div class="span2 left-menu">
|
||||
<div class="container-full">
|
||||
<div class="row">
|
||||
<div class="col-xs-2 left-menu">
|
||||
<div class="sidebar-nav-fixed" mousewheel-scrolling>
|
||||
<div ng-include="'templates/_subscribe.html'"></div>
|
||||
<div ng-include="'templates/_tree.html'"></div>
|
||||
<div ng-include="'templates/_feedsearch.html'"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="span10 main-content">
|
||||
<div class="col-xs-10 main-content">
|
||||
<div id="toolbar" class="toolbar" ng-include="'templates/_toolbar.html'"></div>
|
||||
<div class="entryList">
|
||||
<div ui-view></div>
|
||||
|
||||
19
src/main/webapp/templates/feeds.import.html
Normal file
19
src/main/webapp/templates/feeds.import.html
Normal file
@@ -0,0 +1,19 @@
|
||||
<div>
|
||||
<div class="page-header">
|
||||
<h3>${tree.import}</h3>
|
||||
</div>
|
||||
<form class="form-horizontal" action="rest/feed/import" method="post" enctype="multipart/form-data">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label">${import.xml_file}</label>
|
||||
<div class="col-sm-10 ">
|
||||
<input type="file" name="file" class="form-control"></input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-2 col-sm-10">
|
||||
<button class="btn btn-primary ok" type="submit">${tree.import}</button>
|
||||
<button type="button" class="btn btn-default cancel" ng-click="back()">${global.cancel}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
29
src/main/webapp/templates/feeds.new_category.html
Normal file
29
src/main/webapp/templates/feeds.new_category.html
Normal file
@@ -0,0 +1,29 @@
|
||||
<div>
|
||||
<div class="page-header">
|
||||
<h3>${tree.new_category}</h3>
|
||||
</div>
|
||||
<form name="categoryForm" class="form-horizontal" ng-submit="saveCategory()">
|
||||
<div class="form-group" ng-class="{error : !categoryForm.name.$valid}">
|
||||
<label class="col-sm-2 control-label">${new_category.name}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" name="name" ng-model="cat.name" required></input>
|
||||
<span class="help-block" ng-show="!categoryForm.name.$valid">${global.required}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group" ng-class="{error : !categoryForm.category.$valid}">
|
||||
<label class="col-sm-2 control-label">${new_category.parent}</label>
|
||||
<div class="col-sm-10">
|
||||
<select name="category" ng-model="cat.parentId" class="form-control"
|
||||
ng-options="cat.id as cat.name for cat in CategoryService.flatCategories" required>
|
||||
</select>
|
||||
<span class="help-block" ng-show="!categoryForm.category.$valid">${global.required}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-2 col-sm-10">
|
||||
<button class="btn btn-primary ok" type="submit">${global.save}</button>
|
||||
<button type="button" class="btn btn-default cancel" ng-click="back()">${global.cancel}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
37
src/main/webapp/templates/feeds.subscribe.html
Normal file
37
src/main/webapp/templates/feeds.subscribe.html
Normal file
@@ -0,0 +1,37 @@
|
||||
<div>
|
||||
<div class="page-header">
|
||||
<h3>${tree.subscribe}</h3>
|
||||
</div>
|
||||
<form name="subscribeForm" class="form-horizontal" ng-submit="save()">
|
||||
<div class="form-group" ng-class="{error : !subscribeForm.url.$valid}">
|
||||
<label class="col-sm-2 control-label">${subscribe.feed_url}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="url" ng-model="sub.url" ng-blur="urlChanged()" placeholder="http://example.com/feed" class="form-control"
|
||||
required ng-disabled="state=='loading'" focus="isOpen"></input>
|
||||
<span class="help-block" ng-show="!subscribeForm.url.$valid">${global.required}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group" ng-class="{error : !subscribeForm.title.$valid}">
|
||||
<label class="col-sm-2 control-label">${subscribe.feed_name}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="title" ng-model="sub.title" class="form-control" required ng-disabled="state=='loading'"></input>
|
||||
<span class="help-block" ng-show="!subscribeForm.title.$valid">${global.required}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group" ng-class="{error : !subscribeForm.category.$valid}">
|
||||
<label class="col-sm-2 control-label">${subscribe.category}</label>
|
||||
<div class="col-sm-10">
|
||||
<select name="category" ng-model="sub.categoryId" class="form-control"
|
||||
ng-options="cat.id as cat.name for cat in CategoryService.flatCategories" required>
|
||||
</select>
|
||||
<span class="help-block" ng-show="!subscribeForm.category.$valid">${global.required}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-2 col-sm-10">
|
||||
<button class="btn btn-primary ok" type="submit" ng-disabled="state!='ok'">${global.save}</button>
|
||||
<button class="btn btn-default cancel" ng-click="back()" type="button">${global.cancel}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
@@ -3,16 +3,20 @@
|
||||
<h3>${details.tag_details}</h3>
|
||||
</div>
|
||||
<form name="form" class="form-horizontal" ng-submit="save()">
|
||||
<div class="control-group">
|
||||
<label class="control-label">${details.feed_url}</label>
|
||||
<div class="controls horizontal-align">
|
||||
<a ng-show="user.apiKey" href="{{'rest/category/entriesAsFeed?id=all&tag=' + tag + '&apiKey=' + user.apiKey}}" target="_blank">${global.link}</a>
|
||||
<span ng-show="!user.apiKey">${details.generate_api_key_first}</span>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label">${details.feed_url}</label>
|
||||
<div class="col-sm-10">
|
||||
<div class="checkbox">
|
||||
<a ng-show="user.apiKey" href="{{'rest/category/entriesAsFeed?id=all&tag=' + tag + '&apiKey=' + user.apiKey}}" target="_blank">${global.link}</a>
|
||||
<span ng-show="!user.apiKey">${details.generate_api_key_first}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-actions">
|
||||
<button type="button" class="btn" ng-click="back()">${global.cancel}</button>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-2 col-sm-10">
|
||||
<button type="button" class="btn btn-default" ng-click="back()">${global.cancel}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
@@ -70,15 +70,16 @@
|
||||
<a ng-href="{{entry.enclosureUrl | trustUrl}}" target="_blank" ng-if="entry.enclosureType" download> ${global.download} </a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="entry-buttons form-horizontal">
|
||||
|
||||
<span class="star" ng-mouseup="star(entry, !entry.starred, $event)">
|
||||
<div class="entry-buttons form-inline">
|
||||
<div class="form-group star" ng-mouseup="star(entry, !entry.starred, $event)">
|
||||
<i ng-class="{'icon-star icon-star-yellow': entry.starred, 'icon-star-empty': !entry.starred}" class="pointer"></i>
|
||||
</span>
|
||||
<label class="checkbox inline" ng-if="entry.markable">
|
||||
<input type="checkbox" ng-checked="!entry.read" ng-click="mark(entry, !entry.read)" class="mousetrap"></input>
|
||||
${view.keep_unread}
|
||||
</label>
|
||||
</div>
|
||||
<div class="checkbox">
|
||||
<label ng-if="entry.markable">
|
||||
<input type="checkbox" ng-checked="!entry.read" ng-click="mark(entry, !entry.read)" class="mousetrap"></input>
|
||||
${view.keep_unread}
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<span class="share-buttons" ng-if="settingsService.settings.socialButtons">
|
||||
<a href="mailto:?subject={{entry.title|escape}}&body={{entry.url|escape}}" title="E-mail" popup>
|
||||
|
||||
@@ -1,62 +1,65 @@
|
||||
<div class="container-fluid profile">
|
||||
<div class="profile">
|
||||
<div class="page-header">
|
||||
<h1>${toolbar.profile}</h1>
|
||||
</div>
|
||||
<form name="profileForm" ng-submit="save()" class="form-horizontal">
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="email">${profile.user_name}</label>
|
||||
<div class="controls horizontal-align">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="email">${profile.user_name}</label>
|
||||
<div class="col-sm-10 checkbox">
|
||||
<span>{{user.name}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="email">${profile.email}</label>
|
||||
<div class="controls">
|
||||
<input type="email" id="email" ng-model="user.email" />
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="email">${profile.email}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="email" id="email" ng-model="user.email" class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="password">${profile.change_password}</label>
|
||||
<div class="controls">
|
||||
<input type="password" name="password" id="password" ng-model="user.password"
|
||||
ng-minlength="6" />
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="password">${profile.change_password}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="password" name="password" id="password" ng-model="user.password" class="form-control" ng-minlength="6" />
|
||||
<span class="help-inline" ng-show="profileForm.password.$error.minlength">${profile.minimum_6_chars}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="password">${profile.confirm_password}</label>
|
||||
<div class="controls">
|
||||
<input type="password" name="password_c" id="password_c" ng-model="password_c"
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="password">${profile.confirm_password}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="password" class="form-control" name="password_c" id="password_c" ng-model="password_c"
|
||||
ui-validate="'$value==user.password'" ui-validate-watch="'user.password'">
|
||||
<span class="help-inline" ng-show="profileForm.password_c.$error.validator">${profile.passwords_do_not_match}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="password">${profile.api_key}</label>
|
||||
<div class="controls horizontal-align">
|
||||
<span ng-show="user.apiKey">{{user.apiKey}}</span>
|
||||
<span ng-show="!user.apiKey">${profile.api_key_not_generated}</span>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="password">${profile.api_key}</label>
|
||||
<div class="col-sm-10">
|
||||
<pre ng-show="user.apiKey">{{user.apiKey}}</pre>
|
||||
<span class="help-block" ng-show="!user.apiKey">${profile.api_key_not_generated}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="password">${profile.generate_new_api_key}</label>
|
||||
<div class="controls">
|
||||
<input type="checkbox" name="newApiKey" id="newApiKey" ng-model="newApiKey">
|
||||
<span class="help-block">${profile.generate_new_api_key_info}</span>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="password">${profile.generate_new_api_key}</label>
|
||||
<div class="col-sm-10">
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" name="newApiKey" id="newApiKey" ng-model="newApiKey">
|
||||
<span class="help-inline">${profile.generate_new_api_key_info}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="password">${profile.opml_export}</label>
|
||||
<div class="controls horizontal-align">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="password">${profile.opml_export}</label>
|
||||
<div class="col-sm-10 checkbox">
|
||||
<a href="rest/feed/export" download="commafeed_opml.xml">${global.download}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-actions">
|
||||
<button type="submit" class="btn btn-primary">${global.save}</button>
|
||||
<button type="button" class="btn" ng-click="cancel()">${global.cancel}</button>
|
||||
<button type="button" class="btn btn-danger" ng-click="deleteAccount()">${profile.delete_account}</button>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-2 col-sm-10">
|
||||
<button type="submit" class="btn btn-primary">${global.save}</button>
|
||||
<button type="button" class="btn btn-danger" ng-click="deleteAccount()">${profile.delete_account}</button>
|
||||
<button type="button" class="btn btn-default" ng-click="cancel()">${global.cancel}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
@@ -1,10 +1,10 @@
|
||||
<div class="container-fluid settings">
|
||||
<div class="settings">
|
||||
<div class="page-header">
|
||||
<h1>${toolbar.settings}</h1>
|
||||
</div>
|
||||
<form name="settingsForm" ng-submit="save()">
|
||||
<div class="row">
|
||||
<div class="span2">
|
||||
<div class="col-md-2">
|
||||
<ul class="nav nav-pills nav-stacked">
|
||||
<li ng-class="{active: !tab || tab == 'general'}" class="pointer">
|
||||
<a ng-click="tab = 'general'">${settings.general}</a>
|
||||
@@ -14,64 +14,56 @@
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="span10">
|
||||
<div class="col-md-10">
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane" ng-class="{active: !tab || tab == 'general'}">
|
||||
<div class="form-horizontal">
|
||||
<div class="control-group">
|
||||
<label class="control-label">${settings.general.language}</label>
|
||||
<div class="controls">
|
||||
<select name="language" ng-model="settings.language" class="input-block-level"
|
||||
ng-options="id as label for (id,label) in ServerService.supportedLanguages" required>
|
||||
</select>
|
||||
<span class="help-block">
|
||||
<a href="https://github.com/Athou/commafeed#translate-commafeed-into-your-language" target="_blank">
|
||||
${settings.general.language.contribute}
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>${settings.general.language}</label>
|
||||
<select name="language" ng-model="settings.language" class="form-control"
|
||||
ng-options="id as label for (id,label) in ServerService.supportedLanguages" required>
|
||||
</select>
|
||||
<span class="help-block">
|
||||
<a href="https://github.com/Athou/commafeed#translate-commafeed-into-your-language" target="_blank">
|
||||
${settings.general.language.contribute} </a>
|
||||
</span>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="checkbox">
|
||||
<input type="checkbox" name="showRead"
|
||||
ng-model="settings.showRead" />
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" name="showRead" ng-model="settings.showRead" />
|
||||
${settings.general.show_unread}
|
||||
</label>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="checkbox">
|
||||
<input type="checkbox" name="socialButtons"
|
||||
ng-model="settings.socialButtons" />
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" name="socialButtons" ng-model="settings.socialButtons" />
|
||||
${settings.general.social_buttons}
|
||||
</label>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="checkbox">
|
||||
<input type="checkbox" name="scrollMarks"
|
||||
ng-model="settings.scrollMarks" />
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" name="scrollMarks" ng-model="settings.scrollMarks" />
|
||||
${settings.general.scroll_marks}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane" ng-class="{active: tab == 'css'}">
|
||||
<div>
|
||||
<div class="form-group">
|
||||
<label>${settings.scroll_speed}</label>
|
||||
<input type="number" ng-model="settings.scrollSpeed" min="0" max="1000" />
|
||||
<input type="number" ng-model="settings.scrollSpeed" min="0" max="1000" class="form-control" />
|
||||
<span class="help-inline">${settings.scroll_speed.help}</span>
|
||||
</div>
|
||||
<div>
|
||||
<div class="form-group">
|
||||
<label>${settings.theme}</label>
|
||||
<select ng-model="settings.theme" ng-options="theme for theme in themes"></select>
|
||||
<select ng-model="settings.theme" ng-options="theme for theme in themes" class="form-control"></select>
|
||||
<span class="help-block">
|
||||
<a href="https://github.com/Athou/commafeed#themes" target="_blank">
|
||||
${settings.submit_your_theme}
|
||||
</a>
|
||||
<a href="https://github.com/Athou/commafeed#themes" target="_blank"> ${settings.submit_your_theme} </a>
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
<div class="form-group">
|
||||
<label>${settings.custom_css}</label>
|
||||
<textarea ng-model="settings.customCss" class="input-block-level" rows="20">
|
||||
<textarea ng-model="settings.customCss" class="form-control" rows="20">
|
||||
</textarea>
|
||||
</div>
|
||||
</div>
|
||||
@@ -80,7 +72,7 @@
|
||||
</div>
|
||||
<div class="form-actions">
|
||||
<button type="submit" class="btn btn-primary">${global.save}</button>
|
||||
<button type="button" class="btn" ng-click="cancel()">${global.cancel}</button>
|
||||
<button type="button" class="btn btn-default" ng-click="cancel()">${global.cancel}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
Reference in New Issue
Block a user