cordova-mobile-app-template
Version:
Simple and fully customizable user interface template. Design for mobile app development on Apache Cordova framework or Ionic / Capacitor Native Runtime. Platforms: Android, iOS.
265 lines (198 loc) • 7.72 kB
JavaScript
/* Bismillah */
/*
UI COMPONENT TEMPLATE
- You can customize, this template code as you need:
Started Date: 22 August 2022
Developer: Bugra Ozden
Email: bugra.ozden@gmail.com
Site: https://bug7a.github.io/cordova-mobile-app-ui-template/
EXAMPLE: {cordova-mobile-app-ui-template}/ui-action-button.htm
*/
;
const UIActionButton = {}
// SHARED VARIABLES:
UIActionButton.default = {}
UIActionButton.resetDefault = function() {
UIActionButton.default.actionButtonColor = "#FFD541"
UIActionButton.default.menuButtonColor = "#FFFFFF"
UIActionButton.default.menuBackgroundColor = "whitesmoke"
UIActionButton.default.menuWidth = 280
UIActionButton.default.actionButtonSelectedColor = "lightgray"
UIActionButton.default.actionButtonIconFile = "js/component/ui-action-button/add.png"
UIActionButton.default.actionButtonIconSelectedFile = "js/component/ui-action-button/add.png"
UIActionButton.default.actionButtonIconRotate = 0
UIActionButton.default.actionButtonSelectedIconRotate = 45
UIActionButton.default.coverBackgroundColor = "rgba(0, 0, 0, 0.0)"
UIActionButton.default.actionButtonBorder = 4
UIActionButton.default.rightOuterSpace = 40
UIActionButton.default.bottomOuterSpace = 40
UIActionButton.default.menuRightOuterSpace = 20
UIActionButton.default.iconSize = 30
}
UIActionButton.resetDefault()
UIActionButton.create = function(parameters = {}) {
// BOX: UI object container.
const box = createBox()
// Default values.
box.default = {}
for (let parameterName in UIActionButton.default) {
box.default[parameterName] = (parameters[parameterName] != undefined) ? parameters[parameterName] : UIActionButton.default[parameterName]
}
// *** PRIVATE VARIABLES:
let onActionFunc = function() {}
// *** PUBLIC VARIABLES:
box.itemList = []
box.isMenuOpened = 0
// *** OBJECT MODEL:
box.width = basic.getDefaultContainerBox().width
box.height = basic.getDefaultContainerBox().height
box.color = "transparent"
box.bottom = 0
box.right = 0
// BOX: UI background.
box.boxCover = createBox(0, 0, box.width, box.height)
box.add(that)
//that.color = "transparent"
that.color = box.default.coverBackgroundColor
that.clickable = 0
that.visible = 0
// BOX: Action button container box.
box.boxButton = createBox(0, 0, 90, 90)
box.add(that)
that.right = box.default.rightOuterSpace
that.bottom = box.default.bottomOuterSpace
that.color = box.default.actionButtonColor
that.round = 50
that.border = box.default.actionButtonBorder
that.borderColor = "rgba(0, 0, 0, 0.2)"
that.setMotion("background-color 0.3s")
//that.element.style.boxShadow = "0px 6px 8px rgba(0, 0, 0, 0.1)"
// IMAGE: Action button icon.
box.boxButton.imgIcon = createImage(0, 0, box.default.iconSize, box.default.iconSize)
box.boxButton.add(that)
that.load(box.default.actionButtonIconFile)
that.opacity = 0.4
that.setMotion("transform 0.3s")
//that.rotate = 45
that.center()
/*
// BOX: Action button 2 container box.
box.boxButton2 = createBox(0, 0, 50, 50)
box.add(that)
that.color = "#FFD541"
that.round = 50
that.border = 3
that.right = 1
that.bottom = 1
that.borderColor = "rgba(0, 0, 0, 0.2)"
that.setMotion("background-color 0.3s")
//that.element.style.boxShadow = "0px 6px 8px rgba(0, 0, 0, 0.1)"
box.boxButton2.aline(box.boxButton, "top", 10, "center")
// IMAGE: Action button icon.
box.boxButton2.imgIcon = createImage(0, 0, 20, 20)
box.boxButton2.add(that)
that.load("js/component/ui-action-button/search.svg")
that.opacity = 0.4
that.setMotion("transform 0.3s")
//that.rotate = 45
that.center()
*/
// BOX: Menu buttons container.
box.boxMenu = createBox(0, 0, box.default.menuWidth, 158)
box.add(that)
that.right = box.boxButton.right + box.boxButton.width + box.default.menuRightOuterSpace //140
that.bottom = box.default.bottomOuterSpace
that.color = box.default.menuBackgroundColor
that.round = 13
that.border = 2
that.borderColor = "rgba(0, 0, 0, 0.2)"
//that.element.style.boxShadow = "0px 6px 8px rgba(0, 0, 0, 0.1)"
that.visible = 0
that.opacity = 0
that.element.style.transform = "scale(0.4)"
that.setMotion("opacity 0.2s, transform 0.2s")
const makeMenuOpened = function() {
box.isMenuOpened = 1
box.boxCover.visible = 1
box.boxCover.clickable = 1
box.boxButton.imgIcon.rotate = box.default.actionButtonSelectedIconRotate
box.boxButton.color = box.default.actionButtonSelectedColor
if (box.default.actionButtonIconFile != box.default.actionButtonIconSelectedFile
&& box.default.actionButtonIconSelectedFile) {
box.boxButton.imgIcon.load(box.default.actionButtonIconSelectedFile)
}
}
const makeMenuClosed = function() {
box.isMenuOpened = 0
box.boxCover.visible = 0
box.boxCover.clickable = 0
box.boxButton.imgIcon.rotate = box.default.actionButtonIconRotate
box.boxButton.color = box.default.actionButtonColor
if (box.default.actionButtonIconFile != box.default.actionButtonIconSelectedFile
&& box.default.actionButtonIconSelectedFile) {
box.boxButton.imgIcon.load(box.default.actionButtonIconFile)
}
}
// *** PUBLIC METHODS:
box.openMenu = function(self) {
if (box.itemList.length > 1) {
if (box.motionSetTimeout) {
clearTimeout(box.motionSetTimeout)
}
if (box.isMenuOpened) {
makeMenuClosed()
box.boxMenu.opacity = 0
box.boxMenu.element.style.transform = "scale(0.4)"
box.motionSetTimeout = setTimeout(function() {
box.boxMenu.visible = 0
}, 200)
} else {
makeMenuOpened()
box.boxMenu.visible = 1
box.boxMenu.withMotion(function(self) {
box.boxMenu.opacity = 1
box.boxMenu.element.style.transform = "scale(1)"
})
}
} else {
// If no item added (no sub buttons, call direct action function)
onActionFunc(0)
}
}
box.setItemsByDataList = function(dataList) {
box.boxMenu.html = ""
box.itemList = []
let itemTop = 0
for (let i = 0; i < dataList.length; i++) {
box.boxMenu["btn" + i] = createButton(0, itemTop, box.boxMenu.width, 50)
box.boxMenu.add(that)
that.minimal = 1
that.color = "white"
that.text = dataList[i].text
that.id = dataList[i].id
that.onClick(function(self) {
onActionFunc(self.id)
box.openMenu()
})
box.itemList.push(that)
itemTop += 51
box.boxMenu.height = itemTop + (box.boxMenu.border * 2)
}
makeBasicObject(box)
}
box.onAction = function(func) {
onActionFunc = func
}
box.changeActionButtonColor = function(color) {
box.default.actionButtonColor = color
box.boxButton.color = color
}
// *** CODE:
box.boxButton.onClick(box.openMenu)
// Press anywhere on background for close menu.
box.boxCover.onClick(box.openMenu)
// Dont block other buttons behinde component
box.clickable = 0
makeBasicObject(box)
return box
}