|
|
-
-
- // Popup menu of the activity
- enyo.kind({
- name: "Sugar.Popup",
- kind: "enyo.Control",
- classes: "home-activity-popup",
- published: { margin: null, header: null, items: null, footer: null },
- components: [
- {name: "popuptitle", classes: "popup-title", ontap: "runHeaderAction", components: [
- {name: "icon", showing: false, kind: "Sugar.Icon", x: 5, y: 5, size: constant.iconSizeList},
- {name: "name", classes: "popup-name-text"},
- {name: "title", classes: "popup-title-text"},
- ]},
- {name: "items", classes: "popup-items", showing: false, components: [
- {name: "itemslist", kind: "Sugar.DesktopPopupListView"}
- ]},
- {name: "footer", classes: "popup-items", showing: false, components: [
- {name: "footerlist", kind: "Sugar.DesktopPopupListView"}
- ]}
- ],
-
- // Constructor
- create: function() {
- this.inherited(arguments);
- this.marginChanged();
- this.headerChanged();
- this.itemsChanged();
- this.footerChanged();
- this.timer = null;
- if (l10n.language.direction == "rtl") {
- this.$.popuptitle.setAttribute("dir", "rtl");
- }
- },
-
- // Property changed
- marginChanged: function() {
- if (this.margin == null) {
- this.margin = { left: constant.popupMarginLeft, top: constant.popupMarginTop };
- }
- this.applyStyle("left", (mouse.position.x+this.margin.left)+"px");
- this.applyStyle("top", (mouse.position.y+this.margin.top)+"px");
- },
-
- headerChanged: function() {
- if (this.header != null) {
- this.$.icon.setShowing(this.header.icon != null);
- if (this.header.icon != null) {
- this.$.icon.setIcon(this.header.icon);
- this.$.icon.setColorized(this.header.colorized);
- if (this.header.colorizedColor) {
- this.$.icon.setColorizedColor(this.header.colorizedColor);
- } else {
- this.$.icon.setColorizedColor(null);
- }
- this.$.icon.render();
- }
- this.$.name.setContent(this.header.name);
- if (l10n.language.direction == "rtl") {
- this.$.name.addClass("rtl-10");
- }
- if (this.header.title != null) {
- this.$.name.removeClass("popup-name-text-bottom");
- this.$.title.setContent(this.header.title);
- } else {
- this.$.title.setContent("");
- this.$.name.addClass("popup-name-text-bottom");
- }
- }
- },
-
- itemsChanged: function() {
- if (this.items != null) {
- this.$.itemslist.setItems(this.items);
- }
- },
-
- footerChanged: function() {
- if (this.footer != null) {
- this.$.footerlist.setItems(this.footer);
- }
- },
-
- // Control popup visibility
- showPopup: function() {
- if (this.margin == null) {
- this.margin = { left: constant.popupMarginLeft, top: constant.popupMarginTop };
- }
- var popupSize = 56;
- popupSize += ((this.footer == null || this.footer.length == 0) ? 0 : 53);
- popupSize += (this.items == null ? 0 : 42 * this.items.length);
- var delta = mouse.position.y + this.margin.top + popupSize - document.getElementById("canvas").offsetHeight;
- this.overflow = false;
- if (delta > 0 && (!this.container.hasNode() || !this.container.hasNode().style.overflowY)) {
- // Popup will overflow window, prepare to shift menu
- this.overflow = true;
- }
- this.setStyle("bottom", "");
- this.applyStyle("top", (mouse.position.y+this.margin.top)+"px");
- this.applyStyle("left", (mouse.position.x+this.margin.left)+"px");
- this.show();
- this.timer = window.setInterval(enyo.bind(this, "showContent"), constant.timerPopupDuration);
- },
-
- hidePopup: function() {
- this.hide();
- this.$.items.hide();
- this.$.itemslist.setItems(null);
- this.$.footer.hide();
- this.$.footerlist.setItems(null);
- },
-
- showContent: function() {
- window.clearInterval(this.timer);
- if (this.overflow) {
- this.setStyle("top", "");
- this.applyStyle("bottom", "0px");
- this.applyStyle("left", (mouse.position.x+this.margin.left)+"px");
- }
- this.timer = null;
- if (this.$.items && this.showing) {
- if (this.items != null && this.items.length > 0) {
- this.$.items.show();
- }
- if (this.footer != null && this.footer.length > 0) {
- this.$.footer.show();
- }
- }
- },
-
- // Click on the header icon, launch action
- runHeaderAction: function(s, e) {
- if (this.header.action != null) {
- this.header.action.apply(this, this.header.data);
- return true;
- }
- },
-
- // Test is cursor is inside the popup
- cursorIsInside: function() {
- return util.cursorIsInside(this);
- }
- });
-
-
-
-
- // Items popup ListView
- enyo.kind({
- name: "Sugar.DesktopPopupListView",
- kind: enyo.Scroller,
- published: { items: null },
- classes: "popup-item-listview",
- components: [
- {name: "itemList", classes: "item-list", kind: "Repeater", onSetupItem: "setupItem", components: [
- {name: "item", classes: "item-list-item", ontap: "runItemAction", components: [
- {name: "icon", kind: "Sugar.Icon", x: 5, y: 4, size: constant.iconSizeFavorite},
- {name: "name", classes: "item-name"}
- ]}
- ]}
- ],
-
- // Constructor: init list
- create: function() {
- this.inherited(arguments);
- this.itemsChanged();
- },
-
- // Items changed
- itemsChanged: function() {
- if (this.items != null) {
- this.$.itemList.set("count", this.items.length, true);
- } else {
- this.$.itemList.set("count", 0, true);
- }
- },
-
- // Init setup for a line
- setupItem: function(inSender, inEvent) {
- // Set item in the template
- inEvent.item.$.icon.setIcon(this.items[inEvent.index].icon);
- inEvent.item.$.name.setContent(this.items[inEvent.index].name);
- inEvent.item.$.icon.setColorized(this.items[inEvent.index].colorized);
- if (this.items[inEvent.index].colorizedColor) {
- inEvent.item.$.icon.setColorizedColor(this.items[inEvent.index].colorizedColor);
- } else {
- inEvent.item.$.icon.setColorizedColor(null);
- }
- if (this.items[inEvent.index].disable) {
- inEvent.item.$.name.addRemoveClass('item-name-disable', true);
- inEvent.item.$.name.addRemoveClass('item-name-enable', false);
- } else {
- inEvent.item.$.name.addRemoveClass('item-name-disable', false);
- inEvent.item.$.name.addRemoveClass('item-name-enable', true);
- }
- if (l10n.language.direction == "rtl") {
- inEvent.item.$.name.addClass("rtl-10");
- inEvent.item.$.item.setAttribute("dir", "rtl");
- }
- },
-
- // Run action on item
- runItemAction: function(inSender, inEvent) {
- // Nothing to do if item is disable
- if (this.items[inEvent.index].disable) {
- return;
- }
-
- // Get action and run it if it exist
- var action = this.items[inEvent.index].action;
- if (action != null) {
- action.apply(this, this.items[inEvent.index].data);
- }
- }
- });
|