OpenAuth.Net/OpenAuth.Mvc/Content/scripts/utils/webApp.js
2017-02-06 19:11:21 +08:00

1657 lines
74 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

var app = angular.module('webAppDesign', [])
.run(['$rootScope', '$lrfnRequest', '$lrmDesigner', function ($rootScope, $lrfnRequest, $lrmDesigner) {
$rootScope.windowWidth = $lrfnRequest("windowWidth");
$rootScope.windowHeight = $lrfnRequest("windowHeight") - 41;
var _projectId = $lrfnRequest("projectId");
$rootScope.designer = $lrmDesigner.init(_projectId);
}])
.controller('lrAppCtrl', ['$rootScope', '$scope', '$lrGetIframe', function ($rootScope, $scope, $lrGetIframe) {
$scope.pageTemplates = $rootScope.designer.templates.getPageTemps();
$scope.addPage = $rootScope.designer.addPage;
$scope.btnSaveProject = $rootScope.designer.saveProject;
//$scope.isTabsAdded = true;
//加载完成开始初始化
$rootScope.$on('iframeLoaded', function (event) {
$rootScope.designer.vm.isBeginView = true;
$lrGetIframe('phoneDIndex').doBroadcast('init', $rootScope.designer.currentPage);
$scope.$apply();
});
}])
//用来设置窗口大小
.controller('lrAppMidbarCtrl', ['$scope', '$rootScope', function ($scope, $rootScope) {
var phoneHeight = 765.284, phoneWidth = 387.578;
var iframeH = 568, iframeW = 320, iframeMT = 84.9764;
$scope.phoneScale = '1';
$scope.phoneHeight = phoneHeight + 'px';
$scope.phoneWidth = +phoneWidth + 'px';
$scope.phoneIframeH = iframeH + 'px';
$scope.phoneIframeW = iframeW + 'px';
$scope.phoneIframeMT = iframeMT + 'px';
$scope.marginTop = (($rootScope.windowHeight - phoneHeight - 82) / 2 > 0 ? ($rootScope.windowHeight - phoneHeight - 82) / 2 : 0) + "px";
$scope.changePhoneScale = function () {
var _height = parseFloat($scope.phoneScale) * phoneHeight;
$scope.phoneHeight = _height + 'px';
$scope.phoneWidth = parseFloat($scope.phoneScale) * phoneWidth + 'px';
$scope.marginTop = (($rootScope.windowHeight - _height - 82) / 2 > 0 ? ($rootScope.windowHeight - _height - 82) / 2 : 0) + "px";
$scope.phoneIframeH = parseFloat($scope.phoneScale) * iframeH + 'px';
$scope.phoneIframeW = parseFloat($scope.phoneScale) * iframeW + 'px';
$scope.phoneIframeMT = parseFloat($scope.phoneScale) * iframeMT + 'px';
};
}])
/*扩展标签属性*/
.directive("lrappComponents", ["$rootScope", "$lrmComponents", function ($rootScope, $lrmComponents) {
return {
restrict: "E",
replace: true,
template: '<div ng-repeat="component in $root.componentGroups" class="lr-item-row lr-component" data-value="{{component.id}}"><i class="fa {{component.icon}}"></i>{{component.text}}</div>',
link: function (scope, element, attr) {
$rootScope.componentGroups = $lrmComponents.all();
}
}
}])
.directive("lrappPagetree", ["$rootScope", function ($rootScope) {
return {
restrict: "E",
require: '?ngModel',
replace: true,
template: '<div></div>',
link: function (scope, element, attr, ngModel) {
if (!ngModel)
{
return;
}
ngModel.$render = function () {
ngModel.$viewValue(element);
}
}
}
}])
.directive('lrappBox', function () {
return {
restrict: 'E',
replace: true,
transclude: true,
template:
'<div class="lr-box expanded">' +
'<h4 class="lr-box-toggle"></h4>' +
'<div class="lr-box-content" ng-transclude></div>' +
'</div>',
link: function (scope, element, attr) {
var toggle = element.find('.lr-box-toggle');
element.find('h4').html('<span class="caret"></span>' + attr.name);
toggle.on('click', function () {
if (element.is('.expanded')) {
element.removeClass('expanded');
}
else {
element.addClass('expanded');
}
});
}
};
})
.directive("lrappToggleb", ["$rootScope", function (e) {
return {
restrict: "E",
require: '?ngModel',
template: '<span class="left-text"></span><div class="track"><div class="handle"></div></div><span class="right-text" ></span>',
link: function (scope, element, attr, ngModel) {
ngModel.$render = function () {
if (ngModel.$viewValue) {
element.addClass("active");
}
};
element.on("click", function () {
scope.$apply(cgValue);
});
function cgValue() {
element.addClass("animate");
var flag = element.is(".active");
if (flag) {
element.removeClass("active");
}
else {
element.addClass("active");
}
ngModel.$setViewValue(!flag);
}
}
}
}])
.directive('lrappColorPicker', function () {
return {
restrict: "E",
replace: true,
template: '<div class="input-append color" data-form="colorpicker" data-color="#ffffff" data-color-format="hex">' +
'<span class="add-on"><i style="background-color: #ffffff"></i></span>' +
'<input type="text" value="#ffffff" />' +
'</div>',
link: function (scope, element, attr) {
if (attr.value) {
attr.color = attr.value;
element.find('i').css('background-color', attr.value);
element.find('input').val(attr.value);
}
element.colorpicker();
}
}
})
/*数据模型*/
.factory('$lrmComponents', ['$rootScope', function ($rootScope) {//组件类型
var _doRemove = function (data) {
var components = $rootScope.designer.currentPage.ChildNodes;
components.splice(components.indexOf(data), 1);
$rootScope.designer.templates.fnPageTree.refresh();
$rootScope.designer.currentPage = $rootScope.designer.templates.getHasTemps()[0];
$rootScope.designer.currentFocus = $rootScope.designer.templates.getHasTemps()[0];
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgSelectTemplatePage, { "cmd": "removeComponent", object: $rootScope.designer.templates.getHasTemps()[0] });
$.webappDesigner.attributes($rootScope.designer);
}
var components = [
{
id: "lrHeader",
text: "标题",
icon: "fa-header",
setValue: function (name, value, data) {
switch (name) {
case "text":
if (data.text != value) {
data.text = value;
data.attr.text = value;
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgAttr, { "cmd": "componentAttr", "attrName": 'text', "object": data });
$rootScope.designer.templates.fnPageTree.refreshNode(data.id, data.text);
}
break;
case "size":
if (data.attr.size != value) {
data.attr.size = value;
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgAttr, { "cmd": "componentAttr", "attrName": 'size', "object": data });
}
break;
case "weightSize":
if (data.attr.weight.size != value) {
data.attr.weight.size = value;
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgAttr, { "cmd": "componentAttr", "attrName": 'weightSize', "object": data });
}
case "italic":
if (data.attr.weight.isItalic != value) {
data.attr.weight.isItalic = value;
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgAttr, { "cmd": "componentAttr", "attrName": 'isItalic', "object": data });
}
break;
case "color":
if (data.attr.color != value) {
data.attr.color = value;
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgAttr, { "cmd": "componentAttr", "attrName": 'color', "object": data });
}
break;
case "align":
if (data.attr.align != value) {
data.attr.align = value;
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgAttr, { "cmd": "componentAttr", "attrName": 'align', "object": data });
}
break;
}
},
},
{
id: "lrParagraph",
text: "段落",
icon: "fa fa-align-left",
setValue: function (name, value, data) {
if (data.attr[name] != value) {
data.attr[name] = value;
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgAttr, { "cmd": "componentAttr", "attrName": name, "object": data });
}
}
},
//{ id: "lrBtnBar", text: "按钮组", icon: "fa fa-th-large" },
{
id: "lrBtn",
text: "按钮",
icon: "fa fa-square",
setValue: function (name, value, data) {
switch (name) {
case "link":
if (data.attr.link != value)
{
data.attr.link = value;
}
break;
case "text":
if (data.attr.text != value) {
data.attr.text = value;
data.text = value;
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgAttr, { "cmd": "componentAttr", "attrName": 'text', "object": data });
$rootScope.designer.templates.fnPageTree.refreshNode(data.id, data.text);
}
break;
case "weightSize":
case "italic":
if (data.attr.weight[name] != value) {
data.attr.weight[name] = value;
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgAttr, { "cmd": "componentAttr", "attrName": name, "object": data });
}
break;
case "size":
case "color":
case "align":
case "btnType":
case "btnTheme":
case "btnSize":
if (data.attr[name] != value) {
data.attr[name] = value;
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgAttr, { "cmd": "componentAttr", "attrName": name, "object": data });
}
break;
}
},
},
{
id: "lrInput",
text: "文本框",
icon: "fa fa-italic",
setValue: function (name, value, data) {
if (data.attr[name] != value) {
data.attr[name] = value;
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgAttr, { "cmd": "componentAttr", "attrName": name, "object": data });
}
}
},
{
id: "lrList3",
text: "列表类型一",
icon: "fa fa-th-list",
setValue: function (name, value, data) {
if (data.attr[name] != value) {
data.attr[name] = value;
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgAttr, { "cmd": "componentAttr", "attrName": name, "object": data });
}
}
},
{
id: "lrList4",
text: "列表类型二",
icon: "fa fa-list-ul",
setValue: function (name, value, data) {
if (data.attr[name] != value) {
data.attr[name] = value;
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgAttr, { "cmd": "componentAttr", "attrName": name, "object": data });
}
}
}
//{ id: "lrTextarea", text: "文本区", icon: "fa fa-align-justify" }
];
return {
all: function () {
return components;
},
getOne:function(id){
for(var i in components)
{
if (components[i].id == id)
{
return components[i];
}
}
},
doRemove: _doRemove
};
}])
.factory('$lrmTemplates', ['$rootScope', '$lrfnGuid', '$lrdialogTop', function ($rootScope, $lrfnGuid, $lrdialogTop) {//模板类型(树形菜单)
/*设置空白页的属性的方法*/
var setBlankPageValue = function (name, value, data) {
switch (name) {
case "text":
if (data.text != value) {
data.text = value;
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgAttr, { "cmd": "pageText", "value": value });
refreshTreeNode(data.id, data.text);
}
break;
case "routing":
if (data.attr.routing != value)
{
data.attr.routing = value;
}
break;
case "bgColor":
if (data.attr.bgColor != value)
{
data.attr.bgColor = value;
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgAttr, { "cmd": "pageBgColor", "value": value });
}
break;
case "isTabed":
if (data.attr.isTabed != value) {
data.attr.isTabed = value;
}
break;
case "isPadding":
if (data.attr.isPadding != value) {
data.attr.isPadding = value;
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgAttr, { "cmd": "pageIsPadding", "value": value });
}
break;
case "isHeadHide":
if (data.attr.isHeadHide != value) {
data.attr.isHeadHide = value;
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgAttr, { "cmd": "pageIsHeadHide", "value": value });
}
break;
}
};
var pageTemplates = [{//页面模板
value: "lrPageBlank",
text: "页面",
png: "../../Content/webApp/img/template-blank.png",
img: "fa fa-file-o",
hasChildren: false,
isexpand: false,
parentnodes: "0",
attr: {
value: 'lrPageBlank',
type: 'page',
routing: '/',
bgColor: '#ffffff',
isTabed: 'true',
isPadding: 'true',
isHeadHide: 'false',
isFirst:false
},
setValue: setBlankPageValue,
doButton: function (data) {
if (hasTemplates.length > 1) {
hasTemplates.splice(hasTemplates.indexOf(data), 1);
refreshTree();
$rootScope.designer.currentPage = hasTemplates[0];
$rootScope.designer.currentFocus = hasTemplates[0];
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgSelectTemplatePage, { "cmd": "removePage", object: hasTemplates[0] });
$.webappDesigner.attributes($rootScope.designer);
}
else {
$lrdialogTop('必须保留一个页面', 'error');
}
},
type:"page"
}];
var hasTemplates = [];
/*刷新模板树*/
function refreshTree(id) {
var _id = "";
if ($rootScope.pageTree != undefined) {
$rootScope.pageTree.treeview({
data: hasTemplates,
isTool: true,
nodeTools: [{ text: '删除', img: 'fa fa-trash-o' },
{ text: '复制', img: 'fa fa-clone' },
{
text: '标记默认页',
img: 'fa fa-thumb-tack',
node:"page",
callback: function (id) {
for (var i in hasTemplates)
{
hasTemplates[i].attr.isFirst = false;
if (hasTemplates[i].id == id)
{
hasTemplates[i].attr.isFirst = true;
$rootScope.pageTree.refreshNodeIcon(id, "fa fa-yahoo", ".fa-yahoo");
}
}
}
}],
onnodeclick: function (item) {
treeNotChecked();
var _currentPage = $rootScope.designer.currentPage;
var _currentFocus = $rootScope.designer.currentFocus;
if (_currentFocus.id != item.id) {
$rootScope.designer.currentFocus = item;
if (item.parentnodes == "0")//说明是页面
{
$rootScope.designer.currentPage = item;
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgSelectTemplatePage, { "cmd": "selectPage", "object": item });
}
else {
if (item.parentnodes != _currentPage.id) {
for (var i in hasTemplates) {
var _page = hasTemplates[i];
if (_page.id == item.parentnodes) {
$rootScope.designer.currentPage = _page;
break;
}
}
}
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgSelectTemplatePage, { "cmd": "selectComponent", "object": item, "currentPage": $rootScope.designer.currentPage });
}
$.webappDesigner.attributes($rootScope.designer);
}
}
});
if (id == undefined) {
_id = hasTemplates[0].id
}
else {
_id = id;
}
$rootScope.pageTree.setNodeChecked(_id);
treeNotChecked();
for (var i in hasTemplates) {
if (hasTemplates[i].attr.isFirst == true) {
$rootScope.pageTree.refreshNodeIcon(hasTemplates[i].id, "fa fa-yahoo", ".fa-yahoo");
break;
}
}
}
}
function refreshTreeNode(nodeId,text)
{
$rootScope.pageTree.refreshNode(nodeId, text);
}
/*设置tabs的属性的方法*/
var setTabsValue = function (name, value, data) {
switch (name) {
case "bgColor":
if (data.attr.bgColor != value) {
data.attr.bgColor = value;
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgAttr, { "cmd": "tabsBgColor", "value": value });
}
break;
case "iconColor":
if (data.attr.iconColor != value) {
data.attr.iconColor = value;
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgAttr, { "cmd": "tabsIconColor", "value": value });
}
case "iconType":
if (data.attr.iconType != value) {
data.attr.iconType = value;
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgAttr, { "cmd": "tabsIconType", "value": value });
}
break;
}
};
/*设置tab属性*/
var setTabValue = function (name, value, data) {
switch (name)
{
case "text":
if (data.attr.text != value)
{
data.attr.text = value;
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgAttr, { "cmd": "tabText", "value": value });
$rootScope.tabsTree.refreshNode(data.id, value);
}
break;
case "iconOn":
if (data.attr.iconOn != value) {
data.attr.iconOn = value;
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgAttr, { "cmd": "tabIconOn", "value": value });
}
break;
case "iconOff":
if (data.attr.iconOff != value) {
data.attr.iconOff = value;
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgAttr, { "cmd": "tabIconOff", "value": value });
}
break;
case "innerTabPage":
if (data.attr.lrInnerTabPage != value) {
data.attr.lrInnerTabPage = value;
}
break;
}
}
/*删除tab*/
var removeTab = function (data)
{
if (hasTabsTemplates[0].ChildNodes.length > 1) {
hasTabsTemplates[0].ChildNodes.splice(hasTabsTemplates[0].ChildNodes.indexOf(data), 1);
refreshTabsTree();
focusTabsNode(hasTabsTemplates[0].ChildNodes[0].id);
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.doTabTemplate, { "cmd": "removeTab", id: hasTabsTemplates[0].ChildNodes[0].id });
}
else {
$lrdialogTop('Tab不能全部删除', 'error');
}
}
/*tabs树*/
var tabTemplate = {
text: "Tab页",
img: "fa fa-cube",
hasChildren: false,
isexpand: false,
parentnodes: "lrTabs",
attr: {
value: "lrTab",
iconOn: "ion-ios-home",
iconOff: "ion-ios-home-outline",
innerTabPage: "DefaultPage",
},
setValue: setTabValue,
doButton: removeTab
};
var hasTabsTemplates = [
{
id:"lrTabs",//页面模板
value: "lrTabs",
text: "Tabs控制器",
img: "fa fa-sitemap",
hasChildren: true,
isexpand: true,
parentnodes: "0",
attr: {
type: 'tabs',
value: 'lrTabs',
bgColor: 'stable',
iconColor: "dark",
iconType:"top"
},
setValue: setTabsValue,
doButton: function () {
var _dst = angular.copy(tabTemplate);
_dst.id = $lrfnGuid();
hasTabsTemplates[0].ChildNodes.push(_dst);
refreshTabsTree();
focusTabsNode(_dst.id);
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.doTabTemplate, { "cmd": "addTab", id: _dst.id });
}
}];
function refreshTabsTree()
{
if ($rootScope.tabsTree != undefined) {
$rootScope.tabsTree.treeview({
data: hasTabsTemplates,
onnodeclick: function (item) {
pTreeNotChecked();
var _currentPage = $rootScope.designer.currentPage;
var _currentFocus = $rootScope.designer.currentFocus;
if (_currentFocus.id != item.id)
{
if (_currentPage.id != "lrTabs") {
$rootScope.designer.currentPage = hasTabsTemplates[0];
}
$rootScope.designer.currentFocus = item;
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.cgSelectTemplatePage, { "cmd": "lrTabs", "data": hasTabsTemplates[0].ChildNodes, "focus": item });
$.webappDesigner.attributes($rootScope.designer);
}
}
});
}
}
function focusTabsNode(id)
{
for (var i in hasTabsTemplates[0].ChildNodes) {
var item = hasTabsTemplates[0].ChildNodes[i];
if (item.id == id) {
$rootScope.designer.currentFocus = item;
$.webappDesigner.attributes($rootScope.designer);
break;
}
}
pTreeNotChecked();
$rootScope.tabsTree.setNodeChecked(id);
}
/*取消选中*/
function pTreeNotChecked() {
if ($rootScope.pageTree != undefined) {
$rootScope.pageTree.setNodeChecked("");
}
}
function treeNotChecked()
{
if ($rootScope.tabsTree != undefined)
{
$rootScope.tabsTree.setNodeChecked("");
}
}
return {
init: function (data) {
hasTemplates = data;
},
getPageTemps: function () {
return pageTemplates;
},
getHasTemps: function () {
return hasTemplates;
},
getHasTabsTemps: function () {
return hasTabsTemplates;
},
getComponent: function (id, pageId) {
for (var i in hasTemplates) {
var item = hasTemplates[i];
if (item.hasChildren && pageId == item.id) {
for (var j in item.ChildNodes) {
var _childone = item.ChildNodes[j];
if (_childone.id == id) {
return _childone;
}
}
}
}
return null;
},
addPage: function (data) {
var _id = ""; var _dst = {};
if (data == undefined) {
_dst = angular.copy(pageTemplates[0]);
_dst.id = $lrfnGuid();
_id = _dst.id;
hasTemplates.push(_dst);
}
else {
_dst = data;
_id = data.id;
hasTemplates.push(data);
}
refreshTree(_id);
return _dst;
},
addComponent: function (obj) {
for (var i in hasTemplates) {
var item = hasTemplates[i];
if (item.id == obj.parentnodes) {
hasTemplates[i].hasChildren = true;
hasTemplates[i].isexpand = true;
if (hasTemplates[i].ChildNodes == undefined) {
hasTemplates[i].ChildNodes = [];
}
hasTemplates[i].ChildNodes.push(obj);
}
}
},
initTabs: function (data) {
var _data = [
{
id: "lrtab0001",
text: "首页",
img: "fa fa-cube",
hasChildren: false,
isexpand: false,
parentnodes: "lrTabs",
attr: {
value: "lrTab",
iconOn: "ion-ios-home",
iconOff: "ion-ios-home-outline",
innerTabPage: "DefaultPage",
},
setValue: setTabValue,
doButton: removeTab
},
{
id: "lrtab0002",
text: "实例",
img: "fa fa-cube",
hasChildren: false,
isexpand: false,
parentnodes: "lrTabs",
attr: {
value: "lrTab",
iconOn: "ion-ios-book",
iconOff: "ion-ios-book-outline",
innerTabPage: "DefaultPage",
},
setValue: setTabValue,
doButton: removeTab
},
{
id: "lrtab0003",
text: "通知",
img: "fa fa-cube",
hasChildren: false,
isexpand: false,
parentnodes: "lrTabs",
attr: {
value: "lrTab",
iconOn: "ion-ios-bell",
iconOff: "ion-ios-bell-outline",
innerTabPage: "DefaultPage",
},
setValue: setTabValue,
doButton: removeTab
},
{
id: "lrtab0004",
text: "我的",
img: "fa fa-cube",
hasChildren: false,
isexpand: false,
parentnodes: "lrTabs",
attr: {
value: "lrTab",
iconOn: "ion-ios-person",
iconOff: "ion-ios-person-outline",
innerTabPage: "DefaultPage",
},
setValue: setTabValue,
doButton: removeTab
}
];
if (data == undefined)
{
data = _data;
}
hasTabsTemplates[0].ChildNodes = data;
},
fnPageTree: {
init: function (obj) {
$rootScope.pageTree = obj;
refreshTree();
},
refresh: refreshTree,
focusNode: function (id) {
treeNotChecked();
$rootScope.pageTree.setNodeChecked(id);
},
refreshNode: refreshTreeNode
},
fnTabsTree: {
init: function (obj) {
$rootScope.tabsTree = obj;
refreshTabsTree();
},
refresh: refreshTabsTree,
focusNode: focusTabsNode
}
};
}])
.factory('$lrmDesigner', ['$rootScope', '$lrmComponents', '$lrmTemplates', '$http', '$lrdialogTop', '$lrGetIframe', '$lrfnGuid', function ($rootScope, $lrmComponents, $lrmTemplates, $http, $lrdialogTop, $lrGetIframe, $lrfnGuid) {
var designer = {
projectId: "",
projectName: "",
projectIcon: "icon-webApp.png",
currentPage: {},
currentFocus: {},
isTabsAdded:false,
templates: $lrmTemplates,
components:$lrmComponents,
api: {
saveProjectUrl: "../../AppManage/AppProjects/SaveForm",
getProjectUrl: "../../AppManage/AppProjects/GetFormJson"
},
doPhoneBroadcast: function (cmd, data) {
$lrGetIframe('phoneDIndex').doBroadcast(cmd, data);
},
vm: {
isBeginView: false
},
addPage: function (pageTemplate) {
var _dst = angular.copy(pageTemplate);
_dst.id = $lrfnGuid();
designer.currentPage = _dst;
designer.currentFocus = _dst;
designer.templates.addPage(_dst);
designer.doPhoneBroadcast(appBroadcastCode.cgSelectTemplatePage, { "cmd": "addPage", "object": _dst });
$.webappDesigner.attributes(designer);
},
saveProject: function () {
var _projectEntity = {
"F_Name": designer.projectName,
"F_Icon": designer.projectIcon,
};
if (_projectEntity.F_Name == "") {
$lrdialogTop('请输入项目名称', 'error');
return false;
}
$http.post(designer.api.saveProjectUrl + "?keyValue=" + designer.projectId, _projectEntity)
.success(function (data) {
$lrdialogTop('保存成功', 'success');
})
.error(function () {
$lrdialogTop('保存失败', 'error');
});
}
};
function onBroadcast() {
$rootScope.$on(appBroadcastCode.addComponent, function (event, data) {//添加组件
try {
var treeOne = {
text: data.text,
img: data.img,
parentnodes: designer.currentPage.id,
id: data.id,
attr: data,
setValue: designer.components.getOne(data.value).setValue,
doButton: designer.components.doRemove
};
designer.templates.addComponent(treeOne);
designer.templates.fnPageTree.refresh(treeOne.id);
designer.currentFocus = treeOne;
$.webappDesigner.attributes(designer);
}
catch (e)
{
console.log(e.message);
}
});
$rootScope.$on(appBroadcastCode.doTabTemplatePhone, function (event, data) {//对tab的操作
switch (data.cmd)
{
case "selectTab":
designer.templates.fnTabsTree.focusNode(data.id);
break;
case "duplicate":
var _dst = angular.copy(data.object);
_dst.id = $lrfnGuid();
designer.templates.getHasTabsTemps()[0].ChildNodes.push(_dst);
designer.templates.fnTabsTree.refresh();
designer.templates.fnTabsTree.focusNode(_dst.id);
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.doTabTemplate, { "cmd": "addTab", id: _dst.id });
break;
case "remove":
var _lists = designer.templates.getHasTabsTemps()[0].ChildNodes;
if (_lists.length > 1) {
_lists.splice(_lists.indexOf(data.object), 1);
designer.templates.fnTabsTree.refresh();
designer.templates.fnTabsTree.focusNode(_lists[0].id);
$rootScope.designer.doPhoneBroadcast(appBroadcastCode.doTabTemplate, { "cmd": "removeTab", id: _lists[0].id });
}
else {
$lrdialogTop('Tab不能全部删除', 'error');
}
break;
}
});
$rootScope.$on(appBroadcastCode.doComponentPhone, function (event, data) {//对tab的操作
designer.templates.fnPageTree.focusNode(data.id);
designer.currentFocus = designer.templates.getComponent(data.id, designer.currentPage.id);
$.webappDesigner.attributes(designer);
});
}
return {
init: function (projectId) {
designer.projectId = projectId;
if (designer.projectId == "") {
var tempData = designer.templates.addPage();
designer.templates.initTabs();
designer.currentPage = tempData;
designer.currentFocus = tempData;
$.webappDesigner.attributes(designer);
}
else {
$http.get(designer.api.getProjectUrl + "?keyValue=" + designer.projectId)
.success(function (data) {
designer.projectName = data.F_Name;
designer.projectIcon = data.F_Icon;
})
.error(function () {
designer.projectId = "";
$lrdialogTop('获取数据失败', 'error');
});
}
onBroadcast();
return designer;
}
};
}])
/*方法*/
.factory('$lrfnRequest', function () {//获取传递参数
return function (keyValue) {
var search = location.search.slice(1);
var arr = search.split("&");
for (var i = 0; i < arr.length; i++) {
var ar = arr[i].split("=");
if (ar[0] == keyValue) {
if (unescape(ar[1]) == 'undefined') {
return "";
} else {
return unescape(ar[1]);
}
}
}
return "";
}
})
.factory('$lrfnGuid', function () {
return function () {
var guid = "";
for (var i = 1; i <= 32; i++) {
var n = Math.floor(Math.random() * 16.0).toString(16);
guid += n;
if ((i == 8) || (i == 12) || (i == 16) || (i == 20)) guid += "-";
}
return guid;
};
})
.factory('$lrdialogTop', function () {
return function (content, type) {
$(".tip_container").remove();
var bid = parseInt(Math.random() * 100000);
$("body").prepend('<div id="tip_container' + bid + '" class="container tip_container"><div id="tip' + bid + '" class="mtip"><i class="micon"></i><span id="tsc' + bid + '"></span><i id="mclose' + bid + '" class="mclose"></i></div></div>');
var $this = $(this);
var $tip_container = $("#tip_container" + bid);
var $tip = $("#tip" + bid);
var $tipSpan = $("#tsc" + bid);
//先清楚定时器
clearTimeout(window.timer);
//主体元素绑定事件
$tip.attr("class", type).addClass("mtip");
$tipSpan.html(content);
$tip_container.slideDown(300);
//提示层隐藏定时器
window.timer = setTimeout(function () {
$tip_container.slideUp(300);
$(".tip_container").remove();
}, 4000);
$("#tip_container" + bid).css("left", ($(window).width() - $("#tip_container" + bid).width()) / 2);
}
})
.factory('$lrGetIframe', function () {
function isbrowsername() {
var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
var isOpera = userAgent.indexOf("Opera") > -1;
if (isOpera) {
return "Opera"
}; //判断是否Opera浏览器
if (userAgent.indexOf("Firefox") > -1) {
return "FF";
} //判断是否Firefox浏览器
if (userAgent.indexOf("Chrome") > -1) {
if (window.navigator.webkitPersistentStorage.toString().indexOf('DeprecatedStorageQuota') > -1) {
return "Chrome";
} else {
return "360";
}
}//判断是否Chrome浏览器//360浏览器
if (userAgent.indexOf("Safari") > -1) {
return "Safari";
} //判断是否Safari浏览器
if (userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera) {
return "IE";
}; //判断是否IE浏览器
}
return function (id) {
if (isbrowsername() == "Chrome" || isbrowsername() == "FF") {
return frames[id].contentWindow;
}
else {
return frames[id];
}
}
});
/*Dom操作和给外部调用的方法*/
(function ($) {
function lrAppBox(name, strhtml) {
var html = '<div class="lr-box expanded">';
html += '<h4 class="lr-box-toggle" onClick="lrappbox(this)"><span class="caret"></span>' + name + '</h4>';
html += '<div class="lr-box-content">' + strhtml + '</div>';
html += '</div>';
return html;
}
function lrAppColorPicker(color, width, name) {
var html = '<div class="input-append color" data-form="colorpicker" data-color="' + color + '" style="width:' + width + 'px;" data-color-format="hex">' +
'<span class="add-on"><i style="background-color: ' + color + '"></i></span>' +
'<input type="text" data-name="'+name+'" value="' + color + '" />' +
'</div>';
return html;
}
function buttonGroup(name,data,value, style) {
var html = '<div class="btn-group" style="' + style + '">';
for (var i in data) {
var _item = data[i];
var _icon = _item.icon == undefined ? '<span style="font-size:18px; line-height: 19px;">' + _item.text + '</span>' : '<span class="' + _item.icon + '"></span>';
var _actived = "";
if (_item.value == value)
{
_actived = "actived";
}
html += '<a type="button" class="btn btn-default ' + _actived + ' b' + data.length + ' " onClick="lrappBtnGroup(this)"><input type="text" data-name="' + name + '" style="display:none;" value="' + _item.value + '" >' + _icon + '</a>';
}
html += '</div>';
return html;
}
function lrAppToggle(name,value) {
var _active = '';
if (value == 'true' )
{
_active = 'active';
}
var _html = '<lrapp-toggle class="' + _active + '" onClick="lrappToggle(this)"><input type="text" data-name="' + name + '" style="display:none;" value="' + value + '" > <span class="left-text " ></span><div class="track"><div class="handle"></div></div><span class="right-text" ></span></lrapp-toggle>';
return _html;
}
function lrCombox(name, value, data, width) {
var _option = '';
for (var i in data)
{
var item = data[i];
_option += '<li data-value="' + item.value + '" data-icon = "' + item.icon + '" >' + item.text + '</li>';
}
var _html = '<div id="' + name + '" type="select" class="ui-select" data-name="' + name + '" data-value="' + value + '" style="width:' + width + 'px;display: inline-block;" >' + _option + '</div>';
return _html;
};
var _tempsAttr = {//模板属性设置
lrTabs: function (data) {
var _html = "";
var _boxHtml = "";
var _color = [
{ text: "Light", value: "light", icon: "<span class='color-square light-bg light-border space-right'></span>" },
{ text: "Stable", value: "stable", icon: "<span class='color-square stable-bg stable-border space-right'></span>" },
{ text: "Dark", value: "dark", icon: "<span class='color-square dark-bg dark-border space-right'></span>" },
{ text: "Positive", value: "positive", icon: "<span class='color-square positive-bg positive-border space-right'></span>" },
{ text: "Balanced", value: "balanced", icon: "<span class='color-square balanced-bg balanced-border space-right'></span>" },
{ text: "Assertive", value: "assertive", icon: "<span class='color-square assertive-bg assertive-border space-right'></span>" },
{ text: "Calm", value: "calm", icon: "<span class='color-square calm-bg calm-border space-right'></span>" },
{ text: "Energized", value: "energized", icon: "<span class='color-square energized-bg energized-border space-right'></span>" },
{ text: "Royal", value: "royal", icon: "<span class='color-square royal-bg royal-border space-right'></span>" }
];
var _types = [
{ text: "顶部图标", value: "top", icon: "" },
{ text: "只有图标", value: "only", icon: "" },
{ text: "左侧图标", value: "left", icon: "" },
];
_html += '<div class="lr-app-right-header"><span class="lr-app-title">' + data.text + '</span></div>';
_boxHtml += '<div class="form-group"><label class="control-label">背景色</label>' + lrCombox("bgColor", data.attr.bgColor, _color, 205) + '</div>';
_boxHtml += '<div class="form-group"><label class="control-label">图标色</label>' + lrCombox("iconColor", data.attr.iconColor, _color, 205) + '</div>';
_boxHtml += '<div class="form-group"><label class="control-label">类型</label>' + lrCombox("iconType", data.attr.iconType, _types, 205) + '</div>';
_html += lrAppBox('样式', _boxHtml);
_html += '<div style="margin:10px;"><button type="button" class="btn btn-danger btn-block">增加新的Tab</button></div>';
return _html;
},
lrTab: function (data,designer) {
var _html = "";
var _boxHtml = "";
var _pages = designer.templates.getHasTemps();
var _innerPages = [];
for (var i in _pages)
{
var _item = _pages[i];
var _point = { text: _item.text, value: _item.id, icon: "" };
_innerPages.push(_point);
}
_html += '<div class="lr-app-right-header"><span class="lr-app-typePage"><a>Tabs控制器</a><span class="lr-app-slash">/</span></span>' + data.text + '</div>';
_boxHtml += '<div class="form-group"><label class="control-label">标题</label><input type="text" class="form-control" data-name="text" value="' + data.text + '" ></div>';
_boxHtml += '<div class="form-group"><label class="control-label">未选中图标</label>' + lrCombox("iconOff", data.attr.iconOff, webAppData.iconList, 205) + '</div>';
_boxHtml += '<div class="form-group"><label class="control-label">选中图标</label>' + lrCombox("iconOn", data.attr.iconOn, webAppData.iconList, 205) + '</div>';
_boxHtml += '<div class="form-group"><label class="control-label">内嵌页面</label>' + lrCombox("innerTabPage", data.attr.innerTabPage, _innerPages, 205) + '</div>';
_html += lrAppBox('设置', _boxHtml);
_html += '<div style="margin:10px;"><button type="button" class="btn btn-danger btn-block">删除</button></div>';
return _html;
},
lrPageBlank: function (data) {
var _html = "";
var _boxHtml = "";
_html += '<div class="lr-app-right-header"><span class="lr-app-title">' + data.text + '</span></div>';
_html += '<div class="lr-box" style="padding-top:10px;">';
_html += '<div class="form-group"><label class="control-label">标题</label><input type="text" class="form-control W" data-name="text" value="' + data.text + '" ></div>';
_html += '<div class="form-group"><label class="control-label">路由</label><input type="text" class="form-control W" data-name="routing" value="' + data.attr.routing + '"></div></div>';
_boxHtml = '<div class="form-group"><label class="control-label">Color</label>' + lrAppColorPicker(data.attr.bgColor, 205, "bgColor") + '</div>';
_html += lrAppBox('背景', _boxHtml);
_boxHtml = '<div class="form-group form-toggle "><label class="control-label">显示tabs</label>' + lrAppToggle('isTabed', data.attr.isTabed) + '</div>';
_boxHtml += '<div class="form-group form-toggle "><label class="control-label">内边距</label>' + lrAppToggle('isPadding',data.attr.isPadding) + '</div>';
_boxHtml += '<div class="form-group form-toggle "><label class="control-label">隐藏头部</label>' + lrAppToggle('isHeadHide', data.attr.isHeadHide) + '</div>';
_html += lrAppBox('混合属性', _boxHtml);
_html += '<div style="margin:10px;"><button type="button" class="btn btn-danger btn-block">删除</button></div>';
return _html;
},
lrHeader: function (data, designer) {
var _html = '';
var _boxHtml = '';
var _size = [{ text: "H1", value: "H1", icon: "" },
{ text: "H2", value: "H2", icon: "" },
{ text: "H3", value: "H3", icon: "" },
{ text: "H4", value: "H4", icon: "" },
{ text: "H5", value: "H5", icon: "" }
];
var _weightSize = [{ text: "200", value: "200", icon: "" },
{ text: "300", value: "300", icon: "" },
{ text: "400", value: "400", icon: "" },
{ text: "500", value: "500", icon: "" },
{ text: "600", value: "600", icon: "" }
];
_html += '<div class="lr-app-right-header"><span class="lr-app-typePage"><a>' + designer.currentPage.text + '</a><span class="lr-app-slash">/</span></span>' + data.text + '</div>';
_boxHtml = '<div class="form-group"><input type="text" class="form-control W " data-name="text" value="' + data.text + '" ></div>';
_boxHtml += '<div class="form-group"><label class="control-label">Size</label>' + lrCombox("size", data.attr.size, _size, 205) + '</div>';
_boxHtml += '<div class="form-group"><label class="control-label">Weight</label>' + lrCombox("weightSize", data.attr.weight.size, _weightSize, 100);
_boxHtml += buttonGroup("italic", [{ 'text': 'I', 'value': 'false' }, { 'icon': 'fa fa-italic', 'value': 'true' }], data.attr.weight.isItalic, "margin-left:5px;");
_boxHtml += '</div>';
_boxHtml += '<div class="form-group"><label class="control-label">Color</label>' + lrAppColorPicker(data.attr.color, 205, "color") + '</div>';
_boxHtml += '<div class="form-group"><label class="control-label">Align</label>';
_boxHtml += buttonGroup("align", [{ 'icon': 'fa fa-align-left', "value": "left" }, { 'icon': 'fa fa-align-center', "value": "center" }, { 'icon': 'fa fa-align-right', "value": "right" }, { 'icon': 'fa fa-align-justify', "value": "justify" }], data.attr.align);
_boxHtml += '</div>';
_html += lrAppBox('Text', _boxHtml);
_html += '<div style="margin:10px;"><button type="button" class="btn btn-danger btn-block">删除</button></div>';
return _html;
},
lrParagraph: function (data, designer) {
var _html = '';
var _boxHtml = '';
var _size = [
{ text: "12px", value: "12px", icon: "" },
{ text: "13px", value: "13px", icon: "" },
{ text: "14px", value: "14px", icon: "" },
{ text: "15px", value: "15px", icon: "" },
{ text: "16px", value: "16px", icon: "" },
{ text: "17px", value: "17px", icon: "" },
{ text: "18px", value: "18px", icon: "" },
{ text: "19px", value: "19px", icon: "" },
{ text: "20px", value: "20px", icon: "" },
{ text: "21px", value: "21px", icon: "" },
{ text: "22px", value: "22px", icon: "" },
{ text: "23px", value: "23px", icon: "" },
{ text: "24px", value: "24px", icon: "" },
{ text: "25px", value: "25px", icon: "" }
];
_html += '<div class="lr-app-right-header"><span class="lr-app-typePage"><a>' + designer.currentPage.text + '</a><span class="lr-app-slash">/</span></span>' + data.text + '</div>';
_boxHtml += '<div class="form-group"><label class="control-label">Size</label>' + lrCombox("size", data.attr.size, _size, 205) + '</div>';
_boxHtml += '<div class="form-group"><label class="control-label">Color</label>' + lrAppColorPicker(data.attr.color, 205, "color") + '</div>';
_boxHtml += '<div class="form-group"><label class="control-label">Align</label>';
_boxHtml += buttonGroup("align", [{ 'icon': 'fa fa-align-left', "value": "left" }, { 'icon': 'fa fa-align-center', "value": "center" }, { 'icon': 'fa fa-align-right', "value": "right" }, { 'icon': 'fa fa-align-justify', "value": "justify" }], data.attr.align);
_boxHtml += '</div>';
_boxHtml += '<div class="form-group"><label class="control-label">内容</label><textarea class="form-control W" data-name="content" style="resize: none;height:100px;">' + data.attr.content + '</textarea></div>';
_html += lrAppBox('Text', _boxHtml);
_html += '<div style="margin:10px;"><button type="button" class="btn btn-danger btn-block">删除</button></div>';
return _html;
},
lrBtn: function (data, designer) {
var _html = '';
var _boxHtml = '';
var _pages = designer.templates.getHasTemps();
var _innerPages = [];
for (var i in _pages) {
var _item = _pages[i];
var _point = { text: _item.text, value: _item.id, icon: "" };
_innerPages.push(_point);
}
var _size = [
{ text: "12px", value: "12px" },
{ text: "13px", value: "13px" },
{ text: "14px", value: "14px" },
{ text: "15px", value: "15px" },
{ text: "16px", value: "16px" },
{ text: "17px", value: "17px" },
{ text: "18px", value: "18px" },
{ text: "19px", value: "19px" },
{ text: "20px", value: "20px" },
{ text: "21px", value: "21px" },
{ text: "22px", value: "22px" },
{ text: "23px", value: "23px" },
{ text: "24px", value: "24px" },
{ text: "25px", value: "25px" }
];
var _weightSize = [{ text: "200", value: "200" },
{ text: "300", value: "300" },
{ text: "400", value: "400" },
{ text: "500", value: "500" },
{ text: "600", value: "600" }
];
var _color = [
{ text: "Light", value: "light", icon: "<span class='color-square light-bg light-border space-right'></span>" },
{ text: "Stable", value: "stable", icon: "<span class='color-square stable-bg stable-border space-right'></span>" },
{ text: "Dark", value: "dark", icon: "<span class='color-square dark-bg dark-border space-right'></span>" },
{ text: "Positive", value: "positive", icon: "<span class='color-square positive-bg positive-border space-right'></span>" },
{ text: "Balanced", value: "balanced", icon: "<span class='color-square balanced-bg balanced-border space-right'></span>" },
{ text: "Assertive", value: "assertive", icon: "<span class='color-square assertive-bg assertive-border space-right'></span>" },
{ text: "Calm", value: "calm", icon: "<span class='color-square calm-bg calm-border space-right'></span>" },
{ text: "Energized", value: "energized", icon: "<span class='color-square energized-bg energized-border space-right'></span>" },
{ text: "Royal", value: "royal", icon: "<span class='color-square royal-bg royal-border space-right'></span>" }
];
_html += '<div class="lr-app-right-header"><span class="lr-app-typePage"><a>' + designer.currentPage.text + '</a><span class="lr-app-slash">/</span></span>' + data.text + '</div>';
_boxHtml = '<div class="form-group"><label class="control-label">连接</label>' + lrCombox("link", data.attr.link, _innerPages, 205) + '</div>';
_html += lrAppBox('连接', _boxHtml);
_boxHtml = '<div class="form-group"><input type="text" class="form-control W " data-name="text" value="' + data.text + '" ></div>';
_boxHtml += '<div class="form-group"><label class="control-label">Size</label>' + lrCombox("size", data.attr.size, _size, 205) + '</div>';
_boxHtml += '<div class="form-group"><label class="control-label">Weight</label>' + lrCombox("weightSize", data.attr.weight.size, _weightSize, 100);
_boxHtml += buttonGroup("italic", [{ 'text': 'I', 'value': 'false' }, { 'icon': 'fa fa-italic', 'value': 'true' }], data.attr.weight.isItalic, "margin-left:5px;");
_boxHtml += '</div>';
_boxHtml += '<div class="form-group"><label class="control-label">Color</label>' + lrAppColorPicker(data.attr.color, 205, "color") + '</div>';
_boxHtml += '<div class="form-group"><label class="control-label">Align</label>';
_boxHtml += buttonGroup("align", [{ 'icon': 'fa fa-align-left', "value": "left" }, { 'icon': 'fa fa-align-center', "value": "center" }, { 'icon': 'fa fa-align-right', "value": "right" }, { 'icon': 'fa fa-align-justify', "value": "justify" }], data.attr.align);
_boxHtml += '</div>';
_html += lrAppBox('文本', _boxHtml);
_boxHtml = '<div class="form-group"><label class="control-label">类型</label>' + lrCombox("btnType", data.attr.btnType, [{ text: "Default", value: "default" }, { text: "Clear", value: "clear" }, { text: "Outline", value: "outline" }], 205) + '</div>';
_boxHtml += '<div class="form-group"><label class="control-label">主题</label>' + lrCombox("btnTheme", data.attr.btnTheme, _color, 205) + '</div>';
_boxHtml += '<div class="form-group"><label class="control-label">尺寸</label>' + lrCombox("btnSize", data.attr.btnSize, [{ text: "Standard", value: "standard" }, { text: "Large", value: "large" }, { text: "Small", value: "small" }], 205) + '</div>';
_html += lrAppBox('样式', _boxHtml);
_html += '<div style="margin:10px;"><button type="button" class="btn btn-danger btn-block">删除</button></div>';
return _html;
},
lrInput: function (data, designer) {
var _html = '';
var _boxHtml = '';
var _type = [{ text: "Text", value: "text" },
{ text: "Password", value: "password" }
];
_html += '<div class="lr-app-right-header"><span class="lr-app-typePage"><a>' + designer.currentPage.text + '</a><span class="lr-app-slash">/</span></span>' + data.text + '</div>';
_boxHtml = '<div class="form-group"><label class="control-label">Placeholder</label><input type="text" class="form-control" data-name="placeholder" value="' + data.attr.placeholder + '" ></div>';
_boxHtml += '<div class="form-group"><label class="control-label">Type</label>' + lrCombox("inputType", data.attr.inputType, _type, 205) + '</div>';
_boxHtml += '<div class="form-group"><label class="control-label">Name</label><input type="text" class="form-control" data-name="name" value="' + data.attr.name + '" ></div>';
_html += lrAppBox('输入框设置', _boxHtml);
_html += '<div style="margin:10px;"><button type="button" class="btn btn-danger btn-block">删除</button></div>';
return _html;
},
lrList3: function (data, designer) {
var _html = '';
var _boxHtml = '';
var _pages = designer.templates.getHasTemps();
var _innerPages = [];
for (var i in _pages) {
var _item = _pages[i];
var _point = { text: _item.text, value: _item.id, icon: "" };
_innerPages.push(_point);
}
var _color = [
{ text: "Light", value: "light", icon: "<span class='color-square light-bg light-border space-right'></span>" },
{ text: "Stable", value: "stable", icon: "<span class='color-square stable-bg stable-border space-right'></span>" },
{ text: "Dark", value: "dark", icon: "<span class='color-square dark-bg dark-border space-right'></span>" },
{ text: "Positive", value: "positive", icon: "<span class='color-square positive-bg positive-border space-right'></span>" },
{ text: "Balanced", value: "balanced", icon: "<span class='color-square balanced-bg balanced-border space-right'></span>" },
{ text: "Assertive", value: "assertive", icon: "<span class='color-square assertive-bg assertive-border space-right'></span>" },
{ text: "Calm", value: "calm", icon: "<span class='color-square calm-bg calm-border space-right'></span>" },
{ text: "Energized", value: "energized", icon: "<span class='color-square energized-bg energized-border space-right'></span>" },
{ text: "Royal", value: "royal", icon: "<span class='color-square royal-bg royal-border space-right'></span>" }
];
_html += '<div class="lr-app-right-header"><span class="lr-app-typePage"><a>' + designer.currentPage.text + '</a><span class="lr-app-slash">/</span></span>' + data.text + '</div>';
_boxHtml = '<div class="form-group"><label class="control-label">连接</label>' + lrCombox("link", data.attr.link, _innerPages, 205) + '</div>';
_html += lrAppBox('连接', _boxHtml);
_boxHtml = '<div class="form-group"><label class="control-label">显示文本</label><input type="text" class="form-control" data-name="name" value="' + data.attr.name + '" ></div>';
_boxHtml += '<div class="form-group"><label class="control-label">主题</label>' + lrCombox("color", data.attr.color, _color, 205) + '</div>';
_boxHtml += '<div class="form-group"><label class="control-label">图标</label>' + lrCombox("icon", data.attr.icon, webAppData.iconList, 205) + '</div>';
_html += lrAppBox('列表设置', _boxHtml);
_html += '<div style="margin:10px;"><button type="button" class="btn btn-danger btn-block">删除</button></div>';
return _html;
},
lrList4: function (data, designer) {
var _html = '';
var _boxHtml = '';
var _pages = designer.templates.getHasTemps();
var _innerPages = [];
for (var i in _pages) {
var _item = _pages[i];
var _point = { text: _item.text, value: _item.id, icon: "" };
_innerPages.push(_point);
}
var _color = [
{ text: "a", value: "a", icon: "<span class='color-square bgcolor_a light-border space-right'></span>" },
{ text: "b", value: "b", icon: "<span class='color-square bgcolor_b light-border space-right'></span>" },
{ text: "c", value: "c", icon: "<span class='color-square bgcolor_c light-border space-right'></span>" },
{ text: "d", value: "d", icon: "<span class='color-square bgcolor_d light-border space-right'></span>" },
{ text: "e", value: "e", icon: "<span class='color-square bgcolor_e light-border space-right'></span>" },
{ text: "f", value: "f", icon: "<span class='color-square bgcolor_f light-border space-right'></span>" },
{ text: "g", value: "g", icon: "<span class='color-square bgcolor_g light-border space-right'></span>" },
{ text: "h", value: "h", icon: "<span class='color-square bgcolor_h light-border space-right'></span>" }
];
_html += '<div class="lr-app-right-header"><span class="lr-app-typePage"><a>' + designer.currentPage.text + '</a><span class="lr-app-slash">/</span></span>' + data.text + '</div>';
_boxHtml = '<div class="form-group"><label class="control-label">连接</label>' + lrCombox("link", data.attr.link, _innerPages, 205) + '</div>';
_html += lrAppBox('连接', _boxHtml);
_boxHtml = '<div class="form-group"><label class="control-label">显示文本</label><input type="text" class="form-control" data-name="name" value="' + data.attr.name + '" ></div>';
_boxHtml += '<div class="form-group"><label class="control-label">主题</label>' + lrCombox("color", data.attr.color, _color, 205) + '</div>';
_boxHtml += '<div class="form-group"><label class="control-label">图标</label>' + lrCombox("icon", data.attr.icon, webAppData.iconList, 205) + '</div>';
_html += lrAppBox('列表设置', _boxHtml);
_html += '<div style="margin:10px;"><button type="button" class="btn btn-danger btn-block">删除</button></div>';
return _html;
},
}
$.webappDesigner = {
attributes: function (data) {
//console.log(data.currentFocus);
//var $webAppDesign = angular.element('#webAppDesign');
//var $rootScope = $webAppDesign.scope().$root;
var _currentFocus = data.currentFocus;
var _attr = _currentFocus.attr;
var _currentPage = data.currentPage;
var strhtml = '';
var strBoxHtml = '';
strhtml = _tempsAttr[_attr.value](_currentFocus, data);
$('.lr-app-right-bar').html(strhtml).ready(function () {
$('.color').colorpicker();
$('.ui-select').each(function (r) {
$(this).ComboBox({
height: "400px",
}).bind('change', function () {
var $obj = $(this);
var _value = $obj.attr('data-value');
var _name = $obj.attr("data-name");
data.currentFocus.setValue(_name, _value, data.currentFocus);
});
});
$('.lr-app-right-bar input').unbind();
$('.lr-app-right-bar input').bind('input propertychange', function () {
var $obj = $(this);
var _value = $obj.val();
var _name = $obj.attr("data-name");
if (_name == "routing")
{
if (_value.indexOf("/") < 0)
{
_value = "/" + _value;
$obj.val(_value);
}
}
data.currentFocus.setValue(_name, _value, data.currentFocus);
});
$('.lr-app-right-bar textarea').unbind();
$('.lr-app-right-bar textarea').bind('valuechange', function () {
var $obj = $(this);
var _value = $obj.val();
var _name = $obj.attr("data-name");
data.currentFocus.setValue(_name, _value, data.currentFocus);
});
$('button').on('click', function () {
data.currentFocus.doButton(data.currentFocus);
});
});
},
doBroadcast: function (name, data) {//发送广播
var $webAppDesign = angular.element('#webAppDesign');
var $rootScope = $webAppDesign.scope().$root;
$rootScope.$broadcast(name, data);//iframeLoaded
}
};
$.event.special.valuechange = {
teardown: function (namespaces) {
$(this).unbind('.valuechange');
},
handler: function (e) {
$.event.special.valuechange.triggerChanged($(this));
},
add: function (obj) {
$(this)
.on(
'keyup.valuechange cut.valuechange paste.valuechange input.valuechange',
obj.selector, $.event.special.valuechange.handler)
},
triggerChanged: function (element) {
var current = element[0].contentEditable === 'true' ? element
.html() : element.val(), previous = typeof element
.data('previous') === 'undefined' ? element[0].defaultValue
: element.data('previous')
if (current !== previous) {
element.trigger('valuechange', [element.data('previous')])
element.data('previous', current)
}
}
}
$.fn.ComboBox = function (options) {
//options参数description,height,width,allowSearch,url,param,data
options.id = "key";
options.text = "text";
var $select = $(this);
var json = options.data = [];
var _description = $select.attr("data-value");
$select.find('li').each(function (r) {
var $obj = $(this);
var _text = $obj.html();
var _value = $obj.attr('data-value');
var _icon = $obj.attr('data-icon');
var _a = {};
_a[options.id] = _value;
_a[options.text] = _text;
_a["icon"] = (_icon == "undefined" ? "" : _icon);
if (_description == _value)
{
_description = _a["icon"] + _text;
}
json.push(_a);
});
var _name = $select.attr("data-name");
if (options) {
if ($select.find('.ui-select-text').length == 0) {
var $select_html = "";
$select_html += "<div class=\"ui-select-text\" style='color:#999;'>" + _description + "</div>";
$select_html += "<div class=\"ui-select-option\">";
$select_html += "<div class=\"ui-select-option-content\" style=\"max-height: " + options.height + "\">" + $select.html() + "</div>";
if (options.allowSearch) {
$select_html += "<div class=\"ui-select-option-search\"><input type=\"text\" class=\"form-control\" placeholder=\"搜索关键字\" /><span class=\"input-query\" title=\"Search\"><i class=\"fa fa-search\"></i></span></div>";
}
$select_html += "</div>";
$select.html('');
$select.append($select_html);
}
}
var $option_html = $($("<p>").append($select.find('.ui-select-option').clone()).html());
$option_html.attr('id', $select.attr('id') + '-option');
$select.find('.ui-select-option').remove();
if ($option_html.length > 0) {
$('body').find('#' + $select.attr('id') + '-option').remove();
}
$('body').prepend($option_html);
var $option = $("#" + $select.attr('id') + "-option");
//var json = options.data;
loadComboBoxView(json);
function loadComboBoxView(json, searchValue, m) {
if (json.length > 0) {
var $_html = $('<ul></ul>');
if (options.description) {
$_html.append('<li data-value="">' + options.description + '</li>');
}
$.each(json, function (i) {
var row = json[i];
var title = row[options.title];
if (title == undefined) {
title = "";
}
if (searchValue != undefined) {
if (row[m.text].indexOf(searchValue) != -1) {
$_html.append('<li data-value="' + row[options.id] + '" title="' + title + '">' + row.icon + row[options.text] + '</li>');
}
}
else {
$_html.append('<li data-value="' + row[options.id] + '" title="' + title + '">' + row.icon + row[options.text] + '</li>');
}
});
$option.find('.ui-select-option-content').html($_html);
$option.find('li').css('padding', "0 5px");
$option.find('li').click(function (e) {
var data_text = $(this).html();
var data_value = $(this).attr('data-value');
$select.attr("data-value", data_value).attr("data-text", data_text);
$select.find('.ui-select-text').html(data_text).css('color', '#000');
$option.slideUp(150);
$select.trigger("change");
e.stopPropagation();
}).hover(function (e) {
if (!$(this).hasClass('liactive')) {
$(this).toggleClass('on');
}
e.stopPropagation();
});
}
}
//操作搜索事件
if (options.allowSearch) {
$option.find('.ui-select-option-search').find('input').bind("keypress", function (e) {
if (event.keyCode == "13") {
var value = $(this).val();
loadComboBoxView($(this)[0].options.data, value, $(this)[0].options);
}
}).focus(function () {
$(this).select();
})[0]["options"] = options;
}
$select.unbind('click');
$select.bind("click", function (e) {
if ($select.attr('readonly') == 'readonly' || $select.attr('disabled') == 'disabled') {
return false;
}
$(this).addClass('ui-select-focus');
if ($option.is(":hidden")) {
$select.find('.ui-select-option').hide();
$('.ui-select-option').hide();
var left = $select.offset().left;
var top = $select.offset().top + 35;
var width = $select.width();
if (options.width) {
width = options.width;
}
if (($option.height() + top) < $(window).height()) {
$option.slideDown(150).css({ top: top, left: left, width: width });
} else {
var _top = (top - $option.height() - 32)
$option.show().css({ top: _top, left: left, width: width });
$option.attr('data-show', true);
}
$option.css('border-top', '1px solid #ccc');
$option.find('li').removeClass('liactive');
$option.find('[data-value=' + $select.attr('data-value') + ']').addClass('liactive');
$option.find('.ui-select-option-search').find('input').select();
} else {
if ($option.attr('data-show')) {
$option.hide();
} else {
$option.slideUp(150);
}
}
e.stopPropagation();
});
$(document).click(function (e) {
var e = e ? e : window.event;
var tar = e.srcElement || e.target;
if (!$(tar).hasClass('form-control')) {
if ($option.attr('data-show')) {
$option.hide();
} else {
$option.slideUp(150);
}
$select.removeClass('ui-select-focus');
e.stopPropagation();
}
});
return $select;
}
$.fn.ComboBoxSetValue = function (value) {
if ($.isNullOrEmpty(value)) {
return;
}
var $select = $(this);
var $option = $("#" + $select.attr('id') + "-option");
$select.attr('data-value', value);
var data_text = $option.find('ul').find('[data-value=' + value + ']').html();
if (data_text) {
$select.attr('data-text', data_text);
$select.find('.ui-select-text').html(data_text).css('color', '#000');
$option.find('ul').find('[data-value=' + value + ']').addClass('liactive')
}
return $select;
}
})(window.jQuery);
function lrappbox(a) {
var $obj = $(a).parent();
if ($obj.is('.expanded')) {
$obj.removeClass('expanded');
}
else {
$obj.addClass('expanded');
}
}
function lrappBtnGroup(a) {
var $obj = $(a).parent();
$input = $(a).find('input');
$obj.find('.actived').removeClass('actived');
$(a).addClass('actived');
$input.trigger('propertychange');
}
function lrappToggle(a) {
var $obj = $(a);
$input = $obj.find('input');
$obj.addClass("animate");
var flag = $obj.is(".active");
if (flag) {
$input.val(false);
$obj.removeClass("active");
}
else {
$input.val(true);
$obj.addClass("active");
}
$input.trigger('propertychange');
}