rework prefs profile dialog

This commit is contained in:
Andrew Dolgov 2010-11-21 12:50:14 +03:00
parent 90e4e72602
commit 22988692da
3 changed files with 143 additions and 102 deletions

View File

@ -68,36 +68,44 @@
if ($id == "editPrefProfiles") { if ($id == "editPrefProfiles") {
print "<title>".__('Settings Profiles')."</title>"; print "<div dojoType=\"dijit.Toolbar\">";
print "<content><![CDATA[";
print "<div><input id=\"fadd_profile\" # TODO: depends on selectTableRows() being broken for this list
onkeypress=\"return filterCR(event, addPrefProfile)\" # print "<div dojoType=\"dijit.form.DropDownButton\">".
size=\"40\"> # "<span>" . __('Select')."</span>";
<button onclick=\"javascript:addPrefProfile()\">". # print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
# print "<div onclick=\"selectTableRows('prefFeedProfileList', 'all')\"
# dojoType=\"dijit.MenuItem\">".__('All')."</div>";
# print "<div onclick=\"selectTableRows('prefFeedProfileList', 'none')\"
# dojoType=\"dijit.MenuItem\">".__('None')."</div>";
# print "</div></div>";
# print "<div style='float : right'>";
print "<input name=\"newprofile\" dojoType=\"dijit.form.ValidationTextBox\"
required=\"1\">
<button dojoType=\"dijit.form.Button\"
onclick=\"dijit.byId('profileEditDlg').addProfile()\">".
__('Create profile')."</button></div>"; __('Create profile')."</button></div>";
print "<p>"; # print "</div>";
$result = db_query($link, "SELECT title,id FROM ttrss_settings_profiles $result = db_query($link, "SELECT title,id FROM ttrss_settings_profiles
WHERE owner_uid = ".$_SESSION["uid"]." ORDER BY title"); WHERE owner_uid = ".$_SESSION["uid"]." ORDER BY title");
print __('Select:')."
<a href=\"#\" onclick=\"selectTableRows('prefFeedCatList', 'all')\">".__('All')."</a>,
<a href=\"#\" onclick=\"selectTableRows('prefFeedCatList', 'none')\">".__('None')."</a>";
print "<div class=\"prefFeedCatHolder\">"; print "<div class=\"prefFeedCatHolder\">";
print "<form id=\"profile_edit_form\" onsubmit=\"return false\">"; print "<form id=\"profile_edit_form\" onsubmit=\"return false\">";
print "<table width=\"100%\" class=\"prefFeedCatList\" print "<table width=\"100%\" class=\"prefFeedProfileList\"
cellspacing=\"0\" id=\"prefFeedCatList\">"; cellspacing=\"0\" id=\"prefFeedProfileList\">";
print "<tr class=\"odd\" id=\"FCATR-0\">"; print "<tr class=\"\" id=\"FCATR-0\">"; #odd
print "<td width='5%' align='center'><input print "<td width='5%' align='center'><input
onclick='toggleSelectRow(this);' onclick='toggleSelectRow2(this);'
type=\"checkbox\" id=\"FCCHK-0\"></td>"; dojoType=\"dijit.form.CheckBox\"
type=\"checkbox\"></td>";
if (!$_SESSION["profile"]) { if (!$_SESSION["profile"]) {
$is_active = __("(active)"); $is_active = __("(active)");
@ -105,7 +113,7 @@
$is_active = ""; $is_active = "";
} }
print "<td><span id=\"FCATT-0\">" . print "<td><span>" .
__("Default profile") . " $is_active</span></td>"; __("Default profile") . " $is_active</span></td>";
print "</tr>"; print "</tr>";
@ -116,16 +124,17 @@
$class = ($lnum % 2) ? "even" : "odd"; $class = ($lnum % 2) ? "even" : "odd";
$cat_id = $line["id"]; $profile_id = $line["id"];
$this_row_id = "id=\"FCATR-$cat_id\""; $this_row_id = "id=\"FCATR-$profile_id\"";
print "<tr class=\"$class\" $this_row_id>"; print "<tr class=\"\" $this_row_id>";
$edit_title = htmlspecialchars($line["title"]); $edit_title = htmlspecialchars($line["title"]);
print "<td width='5%' align='center'><input print "<td width='5%' align='center'><input
onclick='toggleSelectRow(this);' onclick='toggleSelectRow2(this);'
type=\"checkbox\" id=\"FCCHK-$cat_id\"></td>"; dojoType=\"dijit.form.CheckBox\"
type=\"checkbox\"></td>";
if ($_SESSION["profile"] == $line["id"]) { if ($_SESSION["profile"] == $line["id"]) {
$is_active = __("(active)"); $is_active = __("(active)");
@ -133,9 +142,23 @@
$is_active = ""; $is_active = "";
} }
print "<td><span id=\"FCATT-$cat_id\">" . print "<td><span dojoType=\"dijit.InlineEditBox\"
$edit_title . "</span> $is_active</td>"; width=\"300px\" autoSave=\"false\"
profile-id=\"$profile_id\">" . $edit_title .
"<script type=\"dojo/method\" event=\"onChange\" args=\"item\">
var elem = this;
dojo.xhrPost({
url: 'backend.php',
content: {op: 'rpc', subop: 'saveprofile',
value: this.value,
id: this.srcNodeRef.getAttribute('profile-id')},
load: function(response) {
elem.attr('value', response);
}
});
</script>
</span> $is_active</td>";
print "</tr>"; print "</tr>";
++$lnum; ++$lnum;
@ -147,19 +170,16 @@
print "<div class='dlgButtons'> print "<div class='dlgButtons'>
<div style='float : left'> <div style='float : left'>
<button onclick=\"return removeSelectedPrefProfiles()\">". <button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('profileEditDlg').removeSelected()\">".
__('Remove')."</button> __('Remove selected profiles')."</button>
<button onclick=\"return activatePrefProfile()\">". <button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('profileEditDlg').activateProfile()\">".
__('Activate')."</button> __('Activate profile')."</button>
</div>"; </div>";
print "<button onclick=\"return closeInfoBox()\">". print "<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('profileEditDlg').hide()\">".
__('Close this window')."</button>"; __('Close this window')."</button>";
print "</div>"; print "</div>";
print "]]></content>";
//return;
} }
if ($id == "pubOPMLUrl") { if ($id == "pubOPMLUrl") {

View File

@ -1061,7 +1061,7 @@
print "<td width='5%' align='center'><input print "<td width='5%' align='center'><input
onclick='toggleSelectRow2(this);' dojoType=\"dijit.form.CheckBox\" onclick='toggleSelectRow2(this);' dojoType=\"dijit.form.CheckBox\"
type=\"checkbox\" id=\"FCCHK-$cat_id\"></td>"; type=\"checkbox\"></td>";
print "<td>"; print "<td>";

157
prefs.js
View File

@ -72,26 +72,6 @@ function notify_callback2(transport) {
notify_info(transport.responseText); notify_info(transport.responseText);
} }
function init_profile_inline_editor() {
try {
if ($("prefFeedCatList")) {
var elems = $("prefFeedCatList").getElementsByTagName("SPAN");
for (var i = 0; i < elems.length; i++) {
if (elems[i].id && elems[i].id.match("FCATT-")) {
var id = elems[i].id.replace("FCATT-", "");
new Ajax.InPlaceEditor(elems[i],
'backend.php?op=rpc&subop=saveprofile&id=' + id);
}
}
}
} catch (e) {
exception_error("init_profile_inline_editor", e);
}
}
function updateFeedList(sort_key) { function updateFeedList(sort_key) {
try { try {
@ -145,51 +125,6 @@ function updateUsersList(sort_key) {
} }
} }
function addPrefProfile() {
var profile = $("fadd_profile");
if (profile.value.length == 0) {
alert(__("Can't add profile: no name specified."));
} else {
notify_progress("Adding profile...");
var query = "?op=rpc&subop=addprofile&title=" +
param_escape(profile.value);
new Ajax.Request("backend.php", {
parameters: query,
onComplete: function(transport) {
editProfiles();
} });
}
}
function addFeedCat() {
var cat = $("fadd_cat");
if (cat.value.length == 0) {
alert(__("Can't add category: no name specified."));
} else {
notify_progress("Adding feed category...");
var query = "?op=pref-feeds&subop=editCats&action=add&cat=" +
param_escape(cat.value);
new Ajax.Request("backend.php", {
parameters: query,
onComplete: function(transport) {
infobox_callback2(transport);
} });
cat.value = "";
}
}
function addUser() { function addUser() {
try { try {
@ -1488,9 +1423,95 @@ function inPreferences() {
} }
function editProfiles() { function editProfiles() {
displayDlg('editPrefProfiles', false, function() { try {
init_profile_inline_editor();
}); if (dijit.byId("profileEditDlg"))
dijit.byId("profileEditDlg").destroyRecursive();
var query = "backend.php?op=dlg&id=editPrefProfiles";
dialog = new dijit.Dialog({
id: "profileEditDlg",
title: __("Settings Profiles"),
style: "width: 600px",
getSelectedProfiles: function() {
return getSelectedTableRowIds("prefFeedProfileList");
},
removeSelected: function() {
var sel_rows = this.getSelectedProfiles();
if (sel_rows.length > 0) {
var ok = confirm(__("Remove selected profiles? Active and default profiles will not be removed."));
if (ok) {
notify_progress("Removing selected profiles...", true);
var query = "?op=rpc&subop=remprofiles&ids="+
param_escape(sel_rows.toString());
new Ajax.Request("backend.php", {
parameters: query,
onComplete: function(transport) {
notify('');
editProfiles();
} });
}
} else {
alert(__("No profiles are selected."));
}
},
activateProfile: function() {
var sel_rows = this.getSelectedProfiles();
if (sel_rows.length == 1) {
var ok = confirm(__("Activate selected profile?"));
if (ok) {
notify_progress("Loading, please wait...");
var query = "?op=rpc&subop=setprofile&id="+
param_escape(sel_rows.toString());
new Ajax.Request("backend.php", {
parameters: query,
onComplete: function(transport) {
window.location.reload();
} });
}
} else {
alert(__("Please choose a profile to activate."));
}
},
addProfile: function() {
if (this.validate()) {
notify_progress("Creating profile...", true);
var query = "?op=rpc&subop=addprofile&title=" +
param_escape(dialog.attr('value').newprofile);
new Ajax.Request("backend.php", {
parameters: query,
onComplete: function(transport) {
notify('');
editProfiles();
} });
}
},
execute: function() {
if (this.validate()) {
}
},
href: query});
dialog.show();
} catch (e) {
exception_error("editProfiles", e);
}
} }
function activatePrefProfile() { function activatePrefProfile() {