зеркало из https://github.com/mozilla/gecko-dev.git
Bug 387749 - add an item detail pane to the organizer. r=dietrich (r=gavin for editable-menulist changes). a=mconnor.
This commit is contained in:
Родитель
0cccc74b01
Коммит
cad73793e2
|
@ -139,7 +139,8 @@ var PlacesCommandHook = {
|
|||
this.panel.openPopup(aAnchorElement, aPosition, -1, -1);
|
||||
|
||||
gEditItemOverlay.initPanel(aItemId,
|
||||
{ hiddenRows: ["description", "location"] });
|
||||
{ hiddenRows: ["description", "location",
|
||||
"loadInSidebar"] });
|
||||
setTimeout(function() {
|
||||
var namePicker = document.getElementById("editBMPanel_namePicker");
|
||||
namePicker.focus();
|
||||
|
|
|
@ -54,8 +54,8 @@ var gEditItemOverlay = {
|
|||
_uri: null,
|
||||
_itemId: -1,
|
||||
_itemType: -1,
|
||||
_readOnly: false,
|
||||
_microsummaries: null,
|
||||
_doneCallback: null,
|
||||
_hiddenRows: [],
|
||||
_observersAdded: false,
|
||||
|
||||
|
@ -76,45 +76,82 @@ var gEditItemOverlay = {
|
|||
|
||||
_showHideRows: function EIO__showHideRows() {
|
||||
var isBookmark = this._itemType == Ci.nsINavBookmarksService.TYPE_BOOKMARK;
|
||||
this._element("nameRow").hidden = this._hiddenRows.indexOf("name") != -1;
|
||||
this._element("folderRow").hidden =
|
||||
|
||||
this._element("nameRow").collapsed = this._hiddenRows.indexOf("name") != -1;
|
||||
this._element("folderRow").collapsed =
|
||||
this._hiddenRows.indexOf("folderPicker") != -1;
|
||||
this._element("tagsRow").hidden =
|
||||
this._hiddenRows.indexOf("tags") != -1 || !isBookmark;
|
||||
this._element("descriptionRow").hidden =
|
||||
this._hiddenRows.indexOf("description") != -1;
|
||||
this._element("locationRow").hidden =
|
||||
this._hiddenRows.indexOf("location") != -1 || !isBookmark;
|
||||
this._element("tagsRow").collapsed = !isBookmark ||
|
||||
this._hiddenRows.indexOf("tags") != -1;
|
||||
this._element("descriptionRow").collapsed =
|
||||
this._hiddenRows.indexOf("description") != -1 ||
|
||||
this._readOnly;
|
||||
this._element("keywordRow").collapsed = !isBookmark || this._readOnly ||
|
||||
this._hiddenRows.indexOf("keyword") != -1;
|
||||
this._element("locationRow").collapsed = !isBookmark ||
|
||||
this._hiddenRows.indexOf("location") != -1;
|
||||
this._element("loadInSidebarCheckbox").collapsed = !isBookmark ||
|
||||
this._readOnly || this._hiddenRows.indexOf("loadInSidebar") != -1;
|
||||
this._element("feedLocationRow").collapsed = !this._isLivemark ||
|
||||
this._hiddenRows.indexOf("feedLocation") != -1;
|
||||
this._element("siteLocationRow").collapsed = !this._isLivemark ||
|
||||
this._hiddenRows.indexOf("siteLocation") != -1;
|
||||
},
|
||||
|
||||
/**
|
||||
* Initialize the panel
|
||||
*/
|
||||
initPanel: function EIO_initPanel(aItemId, aInfo) {
|
||||
const bms = PlacesUtils.bookmarks;
|
||||
|
||||
this._folderMenuList = this._element("folderMenuList");
|
||||
this._folderTree = this._element("folderTree");
|
||||
this._itemId = aItemId;
|
||||
this._itemType = PlacesUtils.bookmarks.getItemType(this._itemId);
|
||||
this._itemType = bms.getItemType(this._itemId);
|
||||
this._determineInfo(aInfo);
|
||||
|
||||
var container = bms.getFolderIdForItem(this._itemId);
|
||||
if (this._itemType == Ci.nsINavBookmarksService.TYPE_BOOKMARK) {
|
||||
this._uri = PlacesUtils.bookmarks.getBookmarkURI(this._itemId);
|
||||
// tags field
|
||||
this._element("tagsField").value =
|
||||
PlacesUtils.tagging.getTagsForURI(this._uri).join(", ");
|
||||
this._uri = bms.getBookmarkURI(this._itemId);
|
||||
this._isLivemark = false;
|
||||
if (PlacesUtils.livemarks.isLivemark(container))
|
||||
this._readOnly = true;
|
||||
else
|
||||
this._readOnly = false;
|
||||
|
||||
this._element("locationField").value = this._uri.spec;
|
||||
this._initTextField("locationField", this._uri.spec);
|
||||
this._initTextField("tagsField",
|
||||
PlacesUtils.tagging
|
||||
.getTagsForURI(this._uri).join(", "),
|
||||
false);
|
||||
this._initTextField("keywordField",
|
||||
bms.getKeywordForBookmark(this._itemId));
|
||||
|
||||
// Load In Sidebar checkbox
|
||||
this._element("loadInSidebarCheckbox").checked =
|
||||
PlacesUtils.annotations.itemHasAnnotation(this._itemId,
|
||||
LOAD_IN_SIDEBAR_ANNO);
|
||||
}
|
||||
else {
|
||||
this._readOnly = false;
|
||||
this._isLivemark = PlacesUtils.livemarks.isLivemark(this._itemId);
|
||||
if (this._isLivemark) {
|
||||
var feedURI = PlacesUtils.livemarks.getFeedURI(this._itemId);
|
||||
var siteURI = PlacesUtils.livemarks.getSiteURI(this._itemId);
|
||||
this._initTextField("feedLocationField", feedURI.spec);
|
||||
this._initTextField("siteLocationField", siteURI ? siteURI.spec : "");
|
||||
}
|
||||
this._uri = null;
|
||||
}
|
||||
|
||||
// folder picker
|
||||
this._initFolderMenuList();
|
||||
this._initFolderMenuList(container);
|
||||
|
||||
// name picker
|
||||
this._initNamePicker();
|
||||
|
||||
// description field
|
||||
this._element("descriptionField").value =
|
||||
PlacesUtils.getItemDescription(this._itemId);
|
||||
this._initTextField("descriptionField",
|
||||
PlacesUtils.getItemDescription(this._itemId));
|
||||
|
||||
this._showHideRows();
|
||||
|
||||
|
@ -126,6 +163,20 @@ var gEditItemOverlay = {
|
|||
}
|
||||
},
|
||||
|
||||
_initTextField: function(aTextFieldId, aValue, aReadOnly) {
|
||||
var field = this._element(aTextFieldId);
|
||||
field.readOnly = aReadOnly !== undefined ? aReadOnly : this._readOnly;
|
||||
|
||||
if (field.value != aValue) {
|
||||
field.value = aValue;
|
||||
|
||||
// clear the undo stack
|
||||
var editor = field.editor;
|
||||
if (editor)
|
||||
editor.transactionManager.clear();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Appends a menu-item representing a bookmarks folder to a menu-popup.
|
||||
* @param aMenupopup
|
||||
|
@ -148,16 +199,15 @@ var gEditItemOverlay = {
|
|||
return folderMenuItem;
|
||||
},
|
||||
|
||||
_initFolderMenuList: function EIO__initFolderMenuList() {
|
||||
_initFolderMenuList: function EIO__initFolderMenuList(aSelectedFolder) {
|
||||
// clean up first
|
||||
var menupopup = this._folderMenuList.menupopup;
|
||||
while (menupopup.childNodes.length > 4)
|
||||
menupopup.removeChild(menupopup.lastChild);
|
||||
|
||||
var container = PlacesUtils.bookmarks.getFolderIdForItem(this._itemId);
|
||||
|
||||
// only show "All Bookmarks" if the url isn't bookmarked somewhere else
|
||||
this._element("unfiledRootItem").hidden = container != PlacesUtils.unfiledRootId;
|
||||
this._element("unfiledRootItem").hidden =
|
||||
aSelectedFolder != PlacesUtils.unfiledRootId;
|
||||
|
||||
// List of recently used folders:
|
||||
var annos = PlacesUtils.annotations;
|
||||
|
@ -189,11 +239,12 @@ var gEditItemOverlay = {
|
|||
this._appendFolderItemToMenupopup(menupopup, folders[i].folderId);
|
||||
}
|
||||
|
||||
var defaultItem = this._getFolderMenuItem(container, true);
|
||||
var defaultItem = this._getFolderMenuItem(aSelectedFolder, true);
|
||||
this._folderMenuList.selectedItem = defaultItem;
|
||||
|
||||
// Hide the folders-separator if no folder is annotated as recently-used
|
||||
this._element("foldersSeparator").hidden = (menupopup.childNodes.length <= 4);
|
||||
this._folderMenuList.disabled = this._readOnly;
|
||||
},
|
||||
|
||||
QueryInterface: function EIO_QueryInterface(aIID) {
|
||||
|
@ -265,7 +316,8 @@ var gEditItemOverlay = {
|
|||
|
||||
var itemToSelect = userEnteredNameField;
|
||||
try {
|
||||
if (this._itemType == Ci.nsINavBookmarksService.TYPE_BOOKMARK)
|
||||
if (this._itemType == Ci.nsINavBookmarksService.TYPE_BOOKMARK &&
|
||||
!this._readOnly)
|
||||
this._microsummaries = this._mss.getMicrosummaries(this._uri, -1);
|
||||
}
|
||||
catch(ex) {
|
||||
|
@ -303,6 +355,12 @@ var gEditItemOverlay = {
|
|||
namePicker.selectedItem = itemToSelect;
|
||||
|
||||
namePicker.setAttribute("droppable", droppable);
|
||||
namePicker.readOnly = this._readOnly;
|
||||
|
||||
// clear the undo stack
|
||||
var editor = namePicker.editor;
|
||||
if (editor)
|
||||
editor.transactionManager.clear();
|
||||
},
|
||||
|
||||
// nsIMicrosummaryObserver
|
||||
|
@ -455,6 +513,52 @@ var gEditItemOverlay = {
|
|||
}
|
||||
},
|
||||
|
||||
onKeywordFieldBlur: function EIO_onKeywordFieldBlur() {
|
||||
var keyword = this._element("keywordField").value;
|
||||
if (keyword != PlacesUtils.bookmarks.getKeywordForBookmark(this._itemId)) {
|
||||
var txn = PlacesUtils.ptm.editBookmarkKeyword(this._itemId, keyword);
|
||||
PlacesUtils.ptm.commitTransaction(txn);
|
||||
}
|
||||
},
|
||||
|
||||
onFeedLocationFieldBlur: function EIO_onFeedLocationFieldBlur() {
|
||||
// XXXmano: uri fixup
|
||||
var uri;
|
||||
try {
|
||||
uri = IO.newURI(this._element("feedLocationField").value);
|
||||
}
|
||||
catch(ex) { return; }
|
||||
|
||||
var currentFeedURI = PlacesUtils.livemarks.getFeedURI(this._itemId);
|
||||
if (!currentFeedURI.equals(uri)) {
|
||||
var txn = PlacesUtils.ptm.editLivemarkFeedURI(this._itemId, uri);
|
||||
PlacesUtils.ptm.commitTransaction(txn);
|
||||
}
|
||||
},
|
||||
|
||||
onSiteLocationFieldBlur: function EIO_onSiteLocationFieldBlur() {
|
||||
// XXXmano: uri fixup
|
||||
var uri = null;
|
||||
try {
|
||||
uri = IO.newURI(this._element("siteLocationField").value);
|
||||
}
|
||||
catch(ex) { }
|
||||
|
||||
var currentSiteURI = PlacesUtils.livemarks.getSiteURI(this._itemId);
|
||||
if (!uri || !currentSiteURI.equals(uri)) {
|
||||
var txn = PlacesUtils.ptm.editLivemarkSiteURI(this._itemId, uri);
|
||||
PlacesUtils.ptm.commitTransaction(txn);
|
||||
}
|
||||
},
|
||||
|
||||
onLoadInSidebarCheckboxCommand:
|
||||
function EIO_onLoadInSidebarCheckboxCommand() {
|
||||
var loadInSidebarChecked = this._element("loadInSidebarCheckbox").checked;
|
||||
var txn = PlacesUtils.ptm.setLoadInSidebar(this._itemId,
|
||||
loadInSidebarChecked);
|
||||
PlacesUtils.ptm.commitTransaction(txn);
|
||||
},
|
||||
|
||||
toggleFolderTreeVisibility: function EIO_toggleFolderTreeVisibility() {
|
||||
var expander = this._element("foldersExpander");
|
||||
if (!this._folderTree.collapsed) {
|
||||
|
@ -672,24 +776,51 @@ var gEditItemOverlay = {
|
|||
if (userEnteredNameField.value != aValue) {
|
||||
userEnteredNameField.value = aValue;
|
||||
var namePicker = this._element("namePicker");
|
||||
if (namePicker.selectedItem == userEnteredNameField)
|
||||
if (namePicker.selectedItem == userEnteredNameField) {
|
||||
namePicker.label = aValue;
|
||||
|
||||
// clear undo stack
|
||||
namePicker.editor.transactionManager.clear();
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "uri":
|
||||
var locationField = this._element("locationField");
|
||||
if (locationField.value != aValue) {
|
||||
locationField.value = aValue;
|
||||
this._uri = IO.newURI(aValue);
|
||||
this._initTextField("locationField", this._uri.spec);
|
||||
this._initNamePicker(); // for microsummaries
|
||||
this._element("tagsField").value =
|
||||
PlacesUtils.tagging.getTagsForURI(this._uri).join(", ");
|
||||
this._initTextField("tagsField",
|
||||
PlacesUtils.tagging
|
||||
.getTagsForURI(this._uri).join(", "),
|
||||
false);
|
||||
this._rebuildTagsSelectorList();
|
||||
}
|
||||
break;
|
||||
case "keyword":
|
||||
this._initTextField("keywordField",
|
||||
PlacesUtils.bookmarks
|
||||
.getKeywordForBookmark(this._itemId));
|
||||
break;
|
||||
case DESCRIPTION_ANNO:
|
||||
this._element("descriptionField").value =
|
||||
PlacesUtils.annotations.getItemDescription(this._itemId);
|
||||
this._initTextField("descriptionField",
|
||||
PlacesUtils.getItemDescription(this._itemId));
|
||||
break;
|
||||
case LOAD_IN_SIDEBAR_ANNO:
|
||||
this._element("loadInSidebarCheckbox").checked =
|
||||
PlacesUtils.annotations.itemHasAnnotation(this._itemId,
|
||||
LOAD_IN_SIDEBAR_ANNO);
|
||||
break;
|
||||
case LMANNO_FEEDURI:
|
||||
var feedURISpec = PlacesUtils.livemarks.getFeedURI(this._itemId).spec;
|
||||
this._initTextField("feedLocationField", feedURISpec);
|
||||
break;
|
||||
case LMANNO_SITEURI:
|
||||
var siteURISpec = "";
|
||||
var siteURI = PlacesUtils.livemarks.getSiteURI(this._itemId);
|
||||
if (siteURI)
|
||||
siteURISpec = siteURI.spec;
|
||||
this._initTextField("siteLocationField", siteURISpec);
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
|
|
@ -49,6 +49,8 @@
|
|||
src="chrome://browser/content/places/editBookmarkOverlay.js"/>
|
||||
|
||||
<vbox id="editBookmarkPanelContent">
|
||||
<broadcaster id="paneElementsBroadcaster"/>
|
||||
|
||||
<grid id="editBookmarkPanelGrid" flex="1">
|
||||
<columns>
|
||||
<column/>
|
||||
|
@ -57,14 +59,16 @@
|
|||
<rows>
|
||||
<row align="center" id="editBMPanel_nameRow">
|
||||
<label value="&editBookmarkOverlay.name.label;"
|
||||
contorl="editBMPanel_namePicker"/>
|
||||
control="editBMPanel_namePicker"
|
||||
observes="paneElementsBroadcaster"/>
|
||||
<menulist id="editBMPanel_namePicker"
|
||||
flex="1"
|
||||
editable="true"
|
||||
droppable="false"
|
||||
oninput="gEditItemOverlay.onNamePickerInput();"
|
||||
onblur="gEditItemOverlay.onNamePickerChange();"
|
||||
oncommand="gEditItemOverlay.onNamePickerChange();">
|
||||
oncommand="gEditItemOverlay.onNamePickerChange();"
|
||||
observes="paneElementsBroadcaster">
|
||||
<menupopup>
|
||||
<menuitem id="editBMPanel_userEnteredName"/>
|
||||
<menuitem disabled="true">
|
||||
|
@ -77,17 +81,39 @@
|
|||
|
||||
<row align="center" id="editBMPanel_locationRow">
|
||||
<label value="&editBookmarkOverlay.location.label;"
|
||||
contorl="editBMPanel_locationField"/>
|
||||
control="editBMPanel_locationField"
|
||||
observes="paneElementsBroadcaster"/>
|
||||
<textbox id="editBMPanel_locationField"
|
||||
onblur="gEditItemOverlay.onLocationFieldBlur();"/>
|
||||
onblur="gEditItemOverlay.onLocationFieldBlur();"
|
||||
observes="paneElementsBroadcaster"/>
|
||||
</row>
|
||||
|
||||
<row align="center" id="editBMPanel_feedLocationRow">
|
||||
<label value="&editBookmarkOverlay.feedLocation.label;"
|
||||
control="editBMPanel_feedLocationField"
|
||||
observes="paneElementsBroadcaster"/>
|
||||
<textbox id="editBMPanel_feedLocationField"
|
||||
onblur="gEditItemOverlay.onFeedLocationFieldBlur();"
|
||||
observes="paneElementsBroadcaster"/>
|
||||
</row>
|
||||
|
||||
<row align="center" id="editBMPanel_siteLocationRow">
|
||||
<label value="&editBookmarkOverlay.siteLocation.label;"
|
||||
control="editBMPanel_siteLocationField"
|
||||
observes="paneElementsBroadcaster"/>
|
||||
<textbox id="editBMPanel_siteLocationField"
|
||||
onblur="gEditItemOverlay.onSiteLocationFieldBlur();"
|
||||
observes="paneElementsBroadcaster"/>
|
||||
</row>
|
||||
|
||||
<row align="center" id="editBMPanel_folderRow">
|
||||
<label value="&editBookmarkOverlay.folder.label;"
|
||||
control="editBMPanel_folderMenuList"/>
|
||||
control="editBMPanel_folderMenuList"
|
||||
observes="paneElementsBroadcaster"/>
|
||||
<menulist id="editBMPanel_folderMenuList"
|
||||
class="folder-icon"
|
||||
oncommand="gEditItemOverlay.onFolderMenuListCommand();">
|
||||
oncommand="gEditItemOverlay.onFolderMenuListCommand();"
|
||||
observes="paneElementsBroadcaster">
|
||||
<menupopup>
|
||||
<!-- Static item for special folders -->
|
||||
<menuitem id="editBMPanel_unfiledRootItem"
|
||||
|
@ -107,7 +133,8 @@
|
|||
tooltiptext="&editBookmarkOverlay.foldersExpanderDown.tooltip;"
|
||||
tooltiptextdown="&editBookmarkOverlay.foldersExpanderDown.tooltip;"
|
||||
tooltiptextup="&editBookmarkOverlay.expanderUp.tooltip;"
|
||||
oncommand="gEditItemOverlay.toggleFolderTreeVisibility();"/>
|
||||
oncommand="gEditItemOverlay.toggleFolderTreeVisibility();"
|
||||
observes="paneElementsBroadcaster"/>
|
||||
</row>
|
||||
|
||||
<tree id="editBMPanel_folderTree"
|
||||
|
@ -118,7 +145,8 @@
|
|||
onselect="gEditItemOverlay.onFolderTreeSelect();"
|
||||
showRoot="true"
|
||||
place="place:folder=2&group=3&excludeItems=1&excludeQueries=1&excludeReadOnlyFolders=1"
|
||||
hidecolumnpicker="true">
|
||||
hidecolumnpicker="true"
|
||||
observes="paneElementsBroadcaster">
|
||||
<treecols>
|
||||
<treecol anonid="title" flex="1" primary="true" hideheader="true"/>
|
||||
</treecols>
|
||||
|
@ -127,25 +155,46 @@
|
|||
|
||||
<row align="center" id="editBMPanel_tagsRow">
|
||||
<label value="&editBookmarkOverlay.tags.label;"
|
||||
control="tagsField"/>
|
||||
control="tagsField"
|
||||
observes="paneElementsBroadcaster"/>
|
||||
<textbox id="editBMPanel_tagsField"
|
||||
onblur="gEditItemOverlay.onTagsFieldBlur();"/>
|
||||
onblur="gEditItemOverlay.onTagsFieldBlur();"
|
||||
observes="paneElementsBroadcaster"/>
|
||||
<button id="editBMPanel_tagsSelectorExpander"
|
||||
class="expander-down"
|
||||
tooltiptext="&editBookmarkOverlay.tagsExpanderDown.tooltip;"
|
||||
tooltiptextdown="&editBookmarkOverlay.tagsExpanderDown.tooltip;"
|
||||
tooltiptextup="&editBookmarkOverlay.expanderUp.tooltip;"
|
||||
oncommand="gEditItemOverlay.toggleTagsSelector();"/>
|
||||
oncommand="gEditItemOverlay.toggleTagsSelector();"
|
||||
observes="paneElementsBroadcaster"/>
|
||||
</row>
|
||||
|
||||
<listbox id="editBMPanel_tagsSelector" height="150" collapsed="true"/>
|
||||
<listbox id="editBMPanel_tagsSelector"
|
||||
height="150" collapsed="true"
|
||||
observes="paneElementsBroadcaster"/>
|
||||
|
||||
<row id="editBMPanel_descriptionRow" align="center">
|
||||
<row id="editBMPanel_keywordRow">
|
||||
<label value="&editBookmarkOverlay.keyword.label;"
|
||||
control="editBMPanel_keywordField"
|
||||
observes="paneElementsBroadcaster"/>
|
||||
<textbox id="editBMPanel_keywordField"
|
||||
onblur="gEditItemOverlay.onKeywordFieldBlur();"
|
||||
observes="paneElementsBroadcaster"/>
|
||||
</row>
|
||||
|
||||
<row id="editBMPanel_descriptionRow">
|
||||
<label value="&editBookmarkOverlay.description.label;"
|
||||
control="editBMPanel_descriptionField"/>
|
||||
control="editBMPanel_descriptionField"
|
||||
observes="paneElementsBroadcaster"/>
|
||||
<textbox id="editBMPanel_descriptionField"
|
||||
onblur="gEditItemOverlay.onDescriptionFieldBlur();"/>
|
||||
multiline="true"
|
||||
onblur="gEditItemOverlay.onDescriptionFieldBlur();"
|
||||
observes="paneElementsBroadcaster"/>
|
||||
</row>
|
||||
<checkbox id="editBMPanel_loadInSidebarCheckbox"
|
||||
label="&editBookmarkOverlay.loadInSidebar.label;"
|
||||
oncommand="gEditItemOverlay.onLoadInSidebarCheckboxCommand();"
|
||||
observes="paneElementsBroadcaster"/>
|
||||
</rows>
|
||||
</grid>
|
||||
</vbox>
|
||||
|
|
|
@ -27,3 +27,10 @@ button.commandButton {
|
|||
display: -moz-box;
|
||||
}
|
||||
|
||||
/* Edit Item Panel */
|
||||
|
||||
#infoScrollbox[minimal="true"] #editBMPanel_descriptionRow,
|
||||
#infoScrollbox[minimal="true"] #editBMPanel_loadInSidebarCheckbox,
|
||||
#infoScrollbox[minimal="true"] #editBMPanel_keywordRow {
|
||||
visibility: collapse;
|
||||
}
|
||||
|
|
|
@ -10,4 +10,3 @@ hbox[type="places"] {
|
|||
menupopup[type="places"] {
|
||||
-moz-binding: url("chrome://browser/content/places/menu.xml#places-menupopup");
|
||||
}
|
||||
|
||||
|
|
|
@ -106,6 +106,7 @@ var PlacesOrganizer = {
|
|||
this._backHistory.unshift(this.location);
|
||||
|
||||
this._content.place = this._location = aLocation;
|
||||
this.onContentTreeSelect();
|
||||
|
||||
// update navigation commands
|
||||
if (this._backHistory.length == 0)
|
||||
|
@ -185,7 +186,6 @@ var PlacesOrganizer = {
|
|||
* Loads the place URI entered in the debug
|
||||
*/
|
||||
loadPlaceURI: function PO_loadPlaceURI() {
|
||||
|
||||
// clear forward history
|
||||
this._forwardHistory.splice(0);
|
||||
|
||||
|
@ -498,28 +498,159 @@ var PlacesOrganizer = {
|
|||
}
|
||||
},
|
||||
|
||||
_paneDisabled: false,
|
||||
_setDetailsFieldsDisabledState:
|
||||
function PO__setDetailsFieldsDisabledState(aDisabled) {
|
||||
if (aDisabled) {
|
||||
document.getElementById("paneElementsBroadcaster")
|
||||
.setAttribute("disabled", "true");
|
||||
}
|
||||
else {
|
||||
document.getElementById("paneElementsBroadcaster")
|
||||
.removeAttribute("disabled");
|
||||
}
|
||||
},
|
||||
|
||||
_detectAndSetDetailsPaneMinimalState:
|
||||
function PO__detectAndSetDetailsPaneMinimalState(aNode) {
|
||||
/**
|
||||
* The details of simple folder-items (as opposed to livemarks) or the
|
||||
* of livemark-children are not likely to fill the scrollbox anyway,
|
||||
* thus we remove the "More/Less" button and show all details.
|
||||
*
|
||||
* the wasminimal attribute here is used to persist the "more/less"
|
||||
* state in a bookmark->folder->bookmark scenario.
|
||||
*/
|
||||
var infoScrollbox = document.getElementById("infoScrollbox");
|
||||
var scrollboxExpander = document.getElementById("infoScrollboxExpander");
|
||||
if ((PlacesUtils.nodeIsFolder(aNode) &&
|
||||
!PlacesUtils.nodeIsLivemarkContainer(aNode)) ||
|
||||
PlacesUtils.nodeIsLivemarkItem(aNode)) {
|
||||
if (infoScrollbox.getAttribute("minimal") == "true")
|
||||
infoScrollbox.setAttribute("wasminimal", "true");
|
||||
infoScrollbox.removeAttribute("minimal");
|
||||
scrollboxExpander.hidden = true;
|
||||
}
|
||||
else {
|
||||
if (infoScrollbox.getAttribute("wasminimal") == "true")
|
||||
infoScrollbox.setAttribute("minimal", "true");
|
||||
infoScrollbox.removeAttribute("wasminimal");
|
||||
scrollboxExpander.hidden = false;
|
||||
}
|
||||
},
|
||||
|
||||
updateThumbnailProportions: function PO_updateThumbnailProportions() {
|
||||
var previewBox = document.getElementById("previewBox");
|
||||
var canvas = document.getElementById("itemThumbnail");
|
||||
var height = previewBox.boxObject.height;
|
||||
var width = height * (screen.width / screen.height);
|
||||
canvas.width = width;
|
||||
canvas.height = height;
|
||||
},
|
||||
|
||||
onContentTreeSelect: function PO_onContentTreeSelect() {
|
||||
// If a textbox within a panel is focused, force-blur it so its contents
|
||||
// are saved
|
||||
if (gEditItemOverlay.itemId != -1) {
|
||||
var focusedElement = document.commandDispatcher.focusedElement;
|
||||
if (focusedElement instanceof HTMLInputElement &&
|
||||
/^editBMPanel.*/.test(focusedElement.parentNode.parentNode.id))
|
||||
focusedElement.blur();
|
||||
}
|
||||
|
||||
var contentTree = document.getElementById("placeContent");
|
||||
var deck = document.getElementById("infoDeck");
|
||||
this.updateStatusBarForView(contentTree);
|
||||
var detailsDeck = document.getElementById("detailsDeck");
|
||||
if (contentTree.hasSelection) {
|
||||
detailsDeck.selectedIndex = 1;
|
||||
if (contentTree.hasSingleSelection) {
|
||||
var selectedNode = contentTree.selectedNode;
|
||||
if (selectedNode.itemId != -1 &&
|
||||
!PlacesUtils.nodeIsSeparator(selectedNode)) {
|
||||
if (this._paneDisabled) {
|
||||
this._setDetailsFieldsDisabledState(false);
|
||||
this._paneDisabled = false;
|
||||
}
|
||||
|
||||
gEditItemOverlay.initPanel(selectedNode.itemId,
|
||||
{ hiddenRows: ["folderPicker"] });
|
||||
deck.selectedIndex = 1;
|
||||
|
||||
this._detectAndSetDetailsPaneMinimalState(selectedNode);
|
||||
this.updateThumbnailProportions();
|
||||
this._updateThumbnail();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
detailsDeck.selectedIndex = 0;
|
||||
var selectItemDesc = document.getElementById("selectItemDescription");
|
||||
var itemsCountLabel = document.getElementById("itemsCountText");
|
||||
var rowCount = this._content.treeBoxObject.view.rowCount;
|
||||
if (rowCount == 0) {
|
||||
selectItemDesc.hidden = true;
|
||||
itemsCountLabel.value = PlacesUtils.getString("detailsPane.noItems");
|
||||
}
|
||||
else {
|
||||
selectItemDesc.hidden = false;
|
||||
if (rowCount == 1)
|
||||
itemsCountLabel.value = PlacesUtils.getString("detailsPane.oneItem");
|
||||
else {
|
||||
itemsCountLabel.value =
|
||||
PlacesUtils.getFormattedString("detailsPane.multipleItems",
|
||||
[rowCount]);
|
||||
}
|
||||
}
|
||||
|
||||
this.updateThumbnailProportions();
|
||||
this._updateThumbnail();
|
||||
}
|
||||
|
||||
// Nothing to do if the pane was already disabled
|
||||
if (!this._paneDisabled) {
|
||||
gEditItemOverlay.uninitPanel();
|
||||
deck.selectedIndex = 0;
|
||||
this._setDetailsFieldsDisabledState(true);
|
||||
this._paneDisabled = true;
|
||||
}
|
||||
},
|
||||
|
||||
_updateThumbnail: function PO__updateThumbnail() {
|
||||
var bo = document.getElementById("previewBox").boxObject;
|
||||
var width = bo.width;
|
||||
var height = bo.height;
|
||||
|
||||
var canvas = document.getElementById("itemThumbnail");
|
||||
var ctx = canvas.getContext('2d');
|
||||
var notAvailableText = canvas.getAttribute("notavailabletext");
|
||||
ctx.save();
|
||||
ctx.fillStyle = "-moz-Dialog";
|
||||
ctx.fillRect(0, 0, width, height);
|
||||
ctx.translate(width/2, height/2);
|
||||
|
||||
ctx.fillStyle = "GrayText";
|
||||
ctx.mozTextStyle = "12pt sans serif";
|
||||
var len = ctx.mozMeasureText(notAvailableText);
|
||||
ctx.translate(-len/2,0);
|
||||
ctx.mozDrawText(notAvailableText);
|
||||
ctx.restore();
|
||||
},
|
||||
|
||||
toggleAdditionalInfoFields: function PO_toggleAdditionalInfoFields() {
|
||||
var infoScrollbox = document.getElementById("infoScrollbox");
|
||||
var scrollboxExpander = document.getElementById("infoScrollboxExpander");
|
||||
if (infoScrollbox.getAttribute("minimal") == "true") {
|
||||
infoScrollbox.removeAttribute("minimal");
|
||||
scrollboxExpander.label = scrollboxExpander.getAttribute("lesslabel");
|
||||
}
|
||||
else {
|
||||
infoScrollbox.setAttribute("minimal", "true");
|
||||
scrollboxExpander.label = scrollboxExpander.getAttribute("morelabel");
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Save the current search (or advanced query) to the bookmarks root.
|
||||
*/
|
||||
saveSearch: function PP_saveSearch() {
|
||||
saveSearch: function PO_saveSearch() {
|
||||
// Get the place: uri for the query.
|
||||
// If the advanced query builder is showing, use that.
|
||||
var queries = [];
|
||||
|
@ -562,8 +693,11 @@ var PlacesOrganizer = {
|
|||
if (!save || input.value == "")
|
||||
return;
|
||||
|
||||
// Add the place: uri as a bookmark under the places root.
|
||||
var txn = PlacesUtils.ptm.createItem(placeURI, PlacesUtils.bookmarks.bookmarksRoot, PlacesUtils.bookmarks.DEFAULT_INDEX, input.value);
|
||||
// Add the place: uri as a bookmark under the bookmarks root.
|
||||
var txn = PlacesUtils.ptm.createItem(placeURI,
|
||||
PlacesUtils.bookmarksRootId,
|
||||
PlacesUtils.bookmarks.DEFAULT_INDEX,
|
||||
input.value);
|
||||
PlacesUtils.ptm.commitTransaction(txn);
|
||||
}
|
||||
};
|
||||
|
@ -1073,17 +1207,15 @@ var PlacesQueryBuilder = {
|
|||
}
|
||||
else {
|
||||
query.uriIsPrefix = (type == "startswith");
|
||||
var ios = Cc["@mozilla.org/network/io-service;1"].
|
||||
getService(Ci.nsIIOService);
|
||||
var spec = document.getElementById(prefix + "Textbox").value;
|
||||
try {
|
||||
query.uri = ios.newURI(spec, null, null);
|
||||
query.uri = IO.newURI(spec);
|
||||
}
|
||||
catch (e) {
|
||||
// Invalid input can cause newURI to barf, that's OK, tack "http://"
|
||||
// onto the front and try again to see if the user omitted it
|
||||
try {
|
||||
query.uri = ios.newURI("http://" + spec, null, null);
|
||||
query.uri = IO.newURI("http://" + spec);
|
||||
}
|
||||
catch (e) {
|
||||
// OK, they have entered something which can never match. This should
|
||||
|
@ -1668,4 +1800,3 @@ var Groupers = {
|
|||
OptionsFilter.update(content.getResult());
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -45,6 +45,8 @@
|
|||
<?xml-stylesheet href="chrome://global/skin/"?>
|
||||
<?xml-stylesheet href="chrome://browser/skin/places/places.css"?>
|
||||
|
||||
<?xul-overlay href="chrome://browser/content/places/editBookmarkOverlay.xul"?>
|
||||
|
||||
#ifdef XP_MACOSX
|
||||
<?xul-overlay href="chrome://browser/content/macBrowserOverlay.xul"?>
|
||||
#else
|
||||
|
@ -64,6 +66,7 @@
|
|||
title="&places.organizer.title;"
|
||||
windowtype="Places:Organizer"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
xmlns:html="http://www.w3.org/1999/xhtml"
|
||||
onload="PlacesOrganizer.init();"
|
||||
onunload="PlacesOrganizer.destroy();"
|
||||
width="700" height="500" screenX="10" screenY="10"
|
||||
|
@ -71,6 +74,8 @@
|
|||
|
||||
<script type="application/x-javascript"
|
||||
src="chrome://browser/content/places/places.js"/>
|
||||
<script type="application/javascript"
|
||||
src="chrome://browser/content/utilityOverlay.js"/>
|
||||
|
||||
#ifdef XP_MACOSX
|
||||
#include ../../../base/content/browserMountPoints.inc
|
||||
|
@ -246,15 +251,6 @@
|
|||
label="&deleteCmd.label;"
|
||||
key="key_delete"
|
||||
accesskey="&deleteCmd.accesskey;"/>
|
||||
<menuitem id="orgRename"
|
||||
command="placesCmd_rename"
|
||||
label="&cmd.rename.label;"
|
||||
accesskey="&cmd.rename.accesskey;"/>
|
||||
<menuitem id="orgProperties"
|
||||
command="placesCmd_show:info"
|
||||
label="&cmd.properties.label;"
|
||||
key="placesKey_show:info"
|
||||
accesskey="&cmd.properties.accesskey;"/>
|
||||
|
||||
<menuseparator id="orgCloseSeparator"/>
|
||||
|
||||
|
@ -270,6 +266,7 @@
|
|||
label="&views.label;"
|
||||
accesskey="&view.accesskey;">
|
||||
<menupopup id="viewMenuPopup">
|
||||
<!--
|
||||
<menuitem id="viewDetails"
|
||||
type="radio"
|
||||
#ifdef MACOSX
|
||||
|
@ -282,18 +279,19 @@
|
|||
|
||||
<menuseparator id="addonsSeparator"/>
|
||||
|
||||
<!--
|
||||
<menuitem id="viewAddons"
|
||||
command=""
|
||||
label="&view.addons.label;"
|
||||
accesskey="&view.addons.label;"/>
|
||||
<menuseparator id="sortingSeparator"/>
|
||||
-->
|
||||
-->
|
||||
|
||||
<menu id="viewColumns"
|
||||
label="&view.columns.label;" accesskey="&view.columns.accesskey;">
|
||||
<menupopup onpopupshowing="ViewMenu.fillWithColumns(event, null, null, 'checkbox', null);"
|
||||
oncommand="ViewMenu.showHideColumn(event.target); event.stopPropagation();"/>
|
||||
</menu>
|
||||
|
||||
<menu id="viewSort" label="&view.sort.label;"
|
||||
accesskey="&view.sort.accesskey;">
|
||||
<menupopup onpopupshowing="ViewMenu.populateSortMenu(event);"
|
||||
|
@ -310,14 +308,14 @@
|
|||
oncommand="ViewMenu.setSortColumn(null, 'descending'); event.stopPropagation();"/>
|
||||
</menupopup>
|
||||
</menu>
|
||||
<!--
|
||||
<!--
|
||||
<menuseparator id="groupingSeparator" observes="placesBC_grouping:separator"/>
|
||||
|
||||
<menuitem id="viewGroupNone" type="radio" name="group"
|
||||
observes="placesBC_grouping:off"/>
|
||||
<menuitem id="viewGroupGroup" type="radio" name="group"
|
||||
observes="placesBC_grouping:on"/>
|
||||
-->
|
||||
-->
|
||||
</menupopup>
|
||||
</toolbarbutton>
|
||||
|
||||
|
@ -409,10 +407,12 @@
|
|||
</hbox>
|
||||
</hbox>
|
||||
#include advancedSearch.inc
|
||||
<vbox flex="1">
|
||||
<tree id="placeContent" class="placesTree" context="placesContext"
|
||||
flex="1" type="places"
|
||||
ondblclick="this.controller.openSelectedNodeWithEvent(event);"
|
||||
onclick="PlacesOrganizer.onTreeClick(event);">
|
||||
onclick="PlacesOrganizer.onTreeClick(event);"
|
||||
onselect="PlacesOrganizer.onContentTreeSelect();">
|
||||
<treecols id="placeContentColumns">
|
||||
<treecol label="&col.name.label;" id="title" flex="5" primary="true"
|
||||
persist="width hidden ordinal sortActive sortDirection"/>
|
||||
|
@ -443,6 +443,38 @@
|
|||
</treecols>
|
||||
<treechildren id="placeContentChildren" view="placeContent" flex="1"/>
|
||||
</tree>
|
||||
<splitter id="contentSplitter" collapse="after" persist="state">
|
||||
<grippy/>
|
||||
</splitter>
|
||||
<hbox persist="height" id="infoPane">
|
||||
<hbox id="previewBox" style="min-width: 60px; -moz-border-end: 1px solid GrayText;">
|
||||
<html:canvas id="itemThumbnail" notavailabletext="&detailsPane.noPreviewAvailable.label;"/>
|
||||
</hbox>
|
||||
<deck flex="1" id="detailsDeck">
|
||||
<vbox align="center">
|
||||
<spacer flex="3"/>
|
||||
<label id="itemsCountText"/>
|
||||
<spacer flex="1"/>
|
||||
<description id="selectItemDescription">
|
||||
&detailsPane.selectAnItemText.description;
|
||||
</description>
|
||||
<spacer flex="3"/>
|
||||
</vbox>
|
||||
<scrollbox id="infoScrollbox" minimal="true" orient="vertical" flex="1" style='overflow: auto;'>
|
||||
<vbox id="editBookmarkPanelContent"/>
|
||||
<hbox>
|
||||
<button type="image" id="infoScrollboxExpander"
|
||||
lesslabel="&detailsPane.less.label;"
|
||||
morelabel="&detailsPane.more.label;"
|
||||
label="&detailsPane.more.label;"
|
||||
oncommand="PlacesOrganizer.toggleAdditionalInfoFields();"
|
||||
observes="paneElementsBroadcaster"/>
|
||||
<spacer flex="1"/>
|
||||
</hbox>
|
||||
</scrollbox>
|
||||
</deck>
|
||||
</hbox>
|
||||
</vbox>
|
||||
<vbox id="debugPanel" hidden="true">
|
||||
<grid>
|
||||
<columns>
|
||||
|
|
|
@ -52,6 +52,7 @@ const LOAD_IN_SIDEBAR_ANNO = "bookmarkProperties/loadInSidebar";
|
|||
const DESCRIPTION_ANNO = "bookmarkProperties/description";
|
||||
const POST_DATA_ANNO = "URIProperties/POSTData";
|
||||
const LMANNO_FEEDURI = "livemark/feedURI";
|
||||
const LMANNO_SITEURI = "livemark/siteURI";
|
||||
|
||||
#ifdef XP_MACOSX
|
||||
// On Mac OSX, the transferable system converts "\r\n" to "\n\n", where we
|
||||
|
@ -408,7 +409,7 @@ var PlacesUtils = {
|
|||
*/
|
||||
nodeIsLivemarkContainer: function PU_nodeIsLivemarkContainer(aNode) {
|
||||
return this.nodeIsFolder(aNode) &&
|
||||
this.annotations.itemHasAnnotation(aNode.itemId, LMANNO_FEEDURI);
|
||||
this.livemarks.isLivemark(aNode.itemId);
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -457,7 +458,7 @@ var PlacesUtils = {
|
|||
},
|
||||
|
||||
/**
|
||||
* String-wraps a NavHistoryResultNode according to the rules of the specified
|
||||
* String-wraps a result node according to the rules of the specified
|
||||
* content type.
|
||||
* @param aNode
|
||||
* The Result node to wrap (serialize)
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
<!ENTITY editBookmarkOverlay.name.label "Name:">
|
||||
<!ENTITY editBookmarkOverlay.location.label "Location:">
|
||||
<!ENTITY editBookmarkOverlay.feedLocation.label "Feed Location:">
|
||||
<!ENTITY editBookmarkOverlay.siteLocation.label "Site Location:">
|
||||
<!ENTITY editBookmarkOverlay.liveTitlesSeparator.label "Live Titles">
|
||||
<!ENTITY editBookmarkOverlay.folder.label "Folder:">
|
||||
<!ENTITY editBookmarkOverlay.allBookmarksFolderItem.label "All Bookmarks">
|
||||
|
@ -9,4 +11,6 @@
|
|||
<!ENTITY editBookmarkOverlay.expanderUp.tooltip "Hide">
|
||||
<!ENTITY editBookmarkOverlay.tags.label "Tags:">
|
||||
<!ENTITY editBookmarkOverlay.description.label "Description:">
|
||||
<!ENTITY editBookmarkOverlay.keyword.label "Keyword:">
|
||||
<!ENTITY editBookmarkOverlay.tagsExpanderDown.tooltip "Show all tags">
|
||||
<!ENTITY editBookmarkOverlay.loadInSidebar.label "Load this bookmark in the sidebar">
|
||||
|
|
|
@ -191,3 +191,12 @@
|
|||
<!ENTITY forwardCmd.label "Forward">
|
||||
<!ENTITY forwardCmd.accesskey "F">
|
||||
<!ENTITY forwardButton.tooltip "Go forward">
|
||||
|
||||
<!ENTITY detailsPane.more.label
|
||||
"More">
|
||||
<!ENTITY detailsPane.less.label
|
||||
"Less">
|
||||
<!ENTITY detailsPane.noPreviewAvailable.label
|
||||
"Preview">
|
||||
<!ENTITY detailsPane.selectAnItemText.description
|
||||
"Select an item to view and edit its properties">
|
||||
|
|
|
@ -93,3 +93,7 @@ EnterExport=Export Bookmarks File
|
|||
saveSearch.title=Save Search
|
||||
saveSearch.inputLabel=Name:
|
||||
saveSearch.defaultText=New Query
|
||||
|
||||
detailsPane.noItems=No items
|
||||
detailsPane.oneItem=One item
|
||||
detailsPane.multipleItems=%S items
|
||||
|
|
|
@ -49,6 +49,8 @@ classic.jar:
|
|||
skin/classic/browser/places/editBookmarkOverlay.css (places/editBookmarkOverlay.css)
|
||||
skin/classic/browser/places/starPage.png (places/starPage.png)
|
||||
skin/classic/browser/places/pageStarred.png (places/pageStarred.png)
|
||||
skin/classic/browser/places/twisty-open.gif (places/twisty-open.gif)
|
||||
skin/classic/browser/places/twisty-closed.gif (places/twisty-closed.gif)
|
||||
skin/classic/browser/places/tag.png (places/tag.png)
|
||||
skin/classic/browser/places/organizer-toolbar.png (bookmarks/Bookmarks-toolbar.png)
|
||||
skin/classic/browser/places/expander-closed-active.png (bookmarks/expander-closed-active.png)
|
||||
|
|
|
@ -112,17 +112,28 @@
|
|||
*/
|
||||
-moz-appearance: textfield;
|
||||
cursor: text;
|
||||
margin: 2px 4px;
|
||||
border: 2px solid;
|
||||
-moz-border-top-colors: ThreeDShadow ThreeDDarkShadow;
|
||||
-moz-border-right-colors: ThreeDHighlight ThreeDLightShadow;
|
||||
-moz-border-bottom-colors: ThreeDHighlight ThreeDLightShadow;
|
||||
-moz-border-left-colors: ThreeDShadow ThreeDDarkShadow;
|
||||
padding: 2px 2px 3px 4px;
|
||||
margin: 4px 4px;
|
||||
border: 3px solid;
|
||||
-moz-border-top-colors: transparent #888888 #000000;
|
||||
-moz-border-right-colors: transparent #FFFFFF #000000;
|
||||
-moz-border-bottom-colors: transparent #FFFFFF #000000;
|
||||
-moz-border-left-colors: transparent #888888 #000000;
|
||||
-moz-border-radius-topright: 2px;
|
||||
-moz-border-radius-bottomleft: 2px;
|
||||
padding: 0;
|
||||
background-color: -moz-Field;
|
||||
color: -moz-FieldText;
|
||||
}
|
||||
|
||||
#editBMPanel_namePicker[droppable="false"][disabled="true"] > .menulist-editable-box {
|
||||
cursor: default;
|
||||
-moz-border-top-colors: transparent ThreeDShadow -moz-Dialog;
|
||||
-moz-border-right-colors: transparent ThreeDShadow -moz-Dialog;
|
||||
-moz-border-bottom-colors: transparent ThreeDShadow -moz-Dialog;
|
||||
-moz-border-left-colors: transparent ThreeDShadow -moz-Dialog;
|
||||
color: GrayText;
|
||||
}
|
||||
|
||||
#editBMPanel_namePicker[droppable="false"] > .menulist-editable-box > html|*.textbox-input {
|
||||
margin: 0px !important;
|
||||
border: none !important;
|
||||
|
|
|
@ -272,3 +272,24 @@ treechildren::-moz-tree-twisty(title, separator) {
|
|||
min-width:0em;
|
||||
}
|
||||
|
||||
/**
|
||||
* info pane
|
||||
*/
|
||||
|
||||
/* More/Less button */
|
||||
#infoScrollboxExpander {
|
||||
list-style-image: url("chrome://browser/skin/places/twisty-open.gif");
|
||||
-moz-appearance: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
max-width: 0;
|
||||
}
|
||||
|
||||
#infoScrollbox[minimal="true"] #infoScrollboxExpander {
|
||||
list-style-image: url("chrome://browser/skin/places/twisty-closed.gif");
|
||||
}
|
||||
|
||||
#itemsCountText,
|
||||
#selectItemDescription {
|
||||
color: GrayText;
|
||||
}
|
||||
|
|
Двоичный файл не отображается.
После Ширина: | Высота: | Размер: 372 B |
Двоичный файл не отображается.
После Ширина: | Высота: | Размер: 372 B |
|
@ -358,7 +358,7 @@
|
|||
|
||||
<binding id="menulist-editable" extends="chrome://global/content/bindings/menulist.xml#menulist">
|
||||
<content sizetopopup="pref">
|
||||
<xul:hbox class="menulist-editable-box textbox-input-box" xbl:inherits="context" flex="1">
|
||||
<xul:hbox class="menulist-editable-box textbox-input-box" xbl:inherits="context,disabled,readonly" flex="1">
|
||||
<html:input class="menulist-editable-input" flex="1" anonid="input" allowevents="true"
|
||||
xbl:inherits="value=label,value,disabled,tabindex,readonly"/>
|
||||
</xul:hbox>
|
||||
|
@ -493,6 +493,11 @@
|
|||
]]></getter>
|
||||
</property>
|
||||
|
||||
<property name="readOnly" onset="this.inputField.readOnly = val;
|
||||
if (val) this.setAttribute('readonly', 'true');
|
||||
else this.removeAttribute('readonly'); return val;"
|
||||
onget="return this.inputField.readOnly;"/>
|
||||
|
||||
<method name="select">
|
||||
<body>
|
||||
this.inputField.select();
|
||||
|
|
Загрузка…
Ссылка в новой задаче