Commit 9f6f9673 authored by Cédric de Saint Martin's avatar Cédric de Saint Martin

Merge branch 'slaprunner'

Conflicts:
	slapos/pubsub/notifier.py
parents 415e50cf fbeebb8b
......@@ -60,22 +60,22 @@ setup(name=name,
'cloudmgr = slapos.cloudmgr.cloudmgr:main',
'cloudstart = slapos.cloudmgr.start:main',
'cloudstop = slapos.cloudmgr.stop:main',
'onetimeupload = slapos.onetimeupload:main',
'equeue = slapos.equeue:main',
'killpidfromfile = slapos.systool:killpidfromfile',
'lampconfigure = slapos.lamp:run [lampconfigure]',
'onetimedownload = slapos.onetimedownload:main',
'onetimeupload = slapos.onetimeupload:main',
'pubsubnotifier = slapos.pubsub.notifier:main',
'pubsubserver = slapos.pubsub:main',
'shacache = slapos.shacache:main',
'slapbuilder = slapos.builder:main',
'slapcontainer = slapos.container:main',
'slapmonitor = slapos.monitor:run_slapmonitor',
'slapmonitor-xml = slapos.monitor:run_slapmonitor_xml',
'slapreport = slapos.monitor:run_slapreport',
'slaprunner = slapos.runner:run',
'killpidfromfile = slapos.systool:killpidfromfile',
'lampconfigure = slapos.lamp:run [lampconfigure]',
'equeue = slapos.equeue:main',
'pubsubserver = slapos.pubsub:main',
'pubsubnotifier = slapos.pubsub.notifier:main',
'slaprunnertest = slapos.runner.runnertest:main',
'zodbpack = slapos.zodbpack:run [zodbpack]',
'slapcontainer = slapos.container:main',
]
},
)
......@@ -191,7 +191,7 @@ def run(config):
cert_file]))
for (src, dst) in [(config.key_file, key_file_dest), (config.cert_file,
cert_file_dest)]:
print "Coping %r to %r, and setting minimum privileges" % (src, dst)
print "Coping %r to %r, and setting minimal privileges" % (src, dst)
if not dry_run:
shutil.copy(src, dst)
os.chmod(dst, 0600)
......
File mode changed from 100644 to 100755
from optparse import OptionParser, Option
# -*- coding: utf-8 -*-
# vim: set et sts=2:
# pylint: disable-msg=W0311,C0301,C0103,C0111,R0904,R0903
import ConfigParser
import datetime
import logging
import logging.handlers
from optparse import OptionParser, Option
import os
import slapos.runner.process
import sys
import subprocess
from datetime import timedelta
from slapos.runner.utils import runInstanceWithLock
class Parser(OptionParser):
"""
......@@ -13,7 +19,7 @@ class Parser(OptionParser):
"""
def __init__(self, usage=None, version=None):
"""
Initialize all options possibles.
Initialize all possible options.
"""
OptionParser.__init__(self, usage=usage, version=version,
option_list=[
......@@ -45,6 +51,13 @@ class Parser(OptionParser):
return options, args[0]
class Config:
def __init__(self):
self.configuration_file_path = None
self.console = None
self.log_file = None
self.logger = None
self.verbose = None
def setConfig(self, option_dict, configuration_file_path):
"""
Set options given by parameters.
......@@ -100,9 +113,13 @@ def run():
config = Config()
config.setConfig(*Parser(usage=usage).check_args())
if os.getuid() == 0:
# avoid mistakes (mainly in development mode)
raise Exception('Do not run SlapRunner as root.')
serve(config)
return_code = 0
except SystemExit, err:
except SystemExit as err:
# Catch exception raise by optparse
return_code = err
......@@ -121,11 +138,13 @@ def serve(config):
instance_profile='instance.cfg',
software_profile='software.cfg',
SECRET_KEY=os.urandom(24),
PERMANENT_SESSION_LIFETIME=timedelta(days=31),
PERMANENT_SESSION_LIFETIME=datetime.timedelta(days=31),
)
if not os.path.exists(workdir):
os.mkdir(workdir)
if not os.path.exists(software_link):
os.mkdir(software_link)
slapos.runner.process.setHandler()
runInstanceWithLock(app.config)
app.run(host=config.runner_host, port=int(config.runner_port),
debug=config.debug, threaded=True)
# -*- coding: utf-8 -*-
# vim: set et sts=2:
#pylint: disable-all
import json
from flask import Response
def as_json(f):
def inner(*args, **kwargs):
return Response(json.dumps(f(*args, **kwargs)), mimetype='application/json')
return inner
This diff is collapsed.
# -*- coding: utf-8 -*-
# vim: set et sts=2:
# pylint: disable-msg=W0311,C0301,C0103,C0111
import slapos.slap
import time
import subprocess
import os
import re
import urllib
from flask import jsonify
import shutil
import string
from git import *
class Popen(subprocess.Popen):
def __init__(self, *args, **kwargs):
kwargs['stdin'] = subprocess.PIPE
kwargs['stderr'] = subprocess.STDOUT
kwargs.setdefault('stdout', subprocess.PIPE)
kwargs.setdefault('close_fds', True)
subprocess.Popen.__init__(self, *args, **kwargs)
self.stdin.flush()
self.stdin.close()
self.stdin = None
from git import Repo
from flask import jsonify
def cloneRepo(data):
"""Clonne a repository
......@@ -49,7 +38,7 @@ def cloneRepo(data):
if data["email"] != "":
config_writer.set_value("user", "email", data["email"])
code = 1
except Exception, e:
except Exception as e:
json = safeResult(str(e))
if os.path.exists(workDir):
shutil.rmtree(workDir)
......@@ -70,7 +59,7 @@ def gitStatus(project):
branch = git.branch().replace(' ', '').split('\n')
isdirty = repo.is_dirty(untracked_files=True)
code = 1
except Exception, e:
except Exception as e:
json = safeResult(str(e))
return jsonify(code=code, result=json, branch=branch, dirty=isdirty)
......@@ -85,7 +74,6 @@ def switchBranch(project, name):
json = ""
try:
repo = Repo(project)
branches = repo.branches
current_branch = repo.active_branch.name
if name == current_branch:
json = "This is already your active branch for this project"
......@@ -93,7 +81,7 @@ def switchBranch(project, name):
git = repo.git
git.checkout(name)
code = 1
except Exception, e:
except Exception as e:
json = safeResult(str(e))
return jsonify(code=code, result=json)
......@@ -115,7 +103,7 @@ def addBranch(project, name, onlyCheckout=False):
else:
git.checkout(name)
code = 1
except Exception, e:
except Exception as e:
json = safeResult(str(e))
return jsonify(code=code, result=json)
......@@ -127,7 +115,7 @@ def getDiff(project):
git = repo.git
current_branch = repo.active_branch.name
result = git.diff(current_branch)
except Exception, e:
except Exception as e:
result = safeResult(str(e))
return result
......@@ -157,7 +145,7 @@ def gitPush(project, msg):
else:
json = "Nothing to be commited"
code = 1
except Exception, e:
except Exception as e:
if undo_commit:
git.reset("HEAD~") #undo previous commit
json = safeResult(str(e))
......@@ -169,14 +157,13 @@ def gitPull(project):
try:
repo = Repo(project)
git = repo.git
current_branch = repo.active_branch.name
git.pull()
code = 1
except Exception, e:
except Exception as e:
result = safeResult(str(e))
return jsonify(code=code, result=result)
def safeResult(result):
"""Parse string and remove credential of the user"""
regex=re.compile("(https:\/\/)([\w\d\._-]+:[\w\d\._-]+)\@([\S]+\s)", re.VERBOSE)
regex = re.compile("(https:\/\/)([\w\d\._-]+:[\w\d\._-]+)\@([\S]+\s)", re.VERBOSE)
return regex.sub(r'\1\3', result)
import os
import psutil
import signal
import subprocess
import sys
SLAPRUNNER_PROCESS_LIST = []
class Popen(subprocess.Popen):
"""
Extension of Popen to launch and kill process in a clean way
"""
def __init__(self, *args, **kwargs):
"""
Launch process and add object to process list for handler
"""
self.name = kwargs.pop('name', None)
kwargs['stdin'] = subprocess.PIPE
kwargs['stderr'] = subprocess.STDOUT
kwargs.setdefault('stdout', subprocess.PIPE)
kwargs.setdefault('close_fds', True)
subprocess.Popen.__init__(self, *args, **kwargs)
SLAPRUNNER_PROCESS_LIST.append(self)
self.stdin.flush()
self.stdin.close()
self.stdin = None
def kill(self, sig=signal.SIGTERM, recursive=False):
"""
Kill process and all its descendant if recursive
"""
if self.poll() is None:
if recursive:
childs_pids = pidppid(self.pid)
for pid in childs_pids:
killNoFail(pid, sig)
killNoFail(self.pid, sig)
if self.poll() is not None:
SLAPRUNNER_PROCESS_LIST.remove(self)
def __del__(self):
"""
Del function, try to kill process group
and process if its group does not exist
"""
for pid in (-self.pid, self.pid):
try:
os.kill(-self.pid, 15)
except OSError:
pass
subprocess.Popen.__del__(self)
def pidppid(pid, recursive=True):
"""
Return a list of all children of pid
"""
return [p.pid for p in psutil.Process(pid).get_children(recursive=recursive)]
def killNoFail(pid, sig):
"""
function to kill without failing. Return True if kill do not fail
"""
try:
os.kill(pid, sig)
return True
except OSError:
return False
def isRunning(name):
"""
Return True if a process with this name is running
"""
for process in SLAPRUNNER_PROCESS_LIST:
if process.name == name:
if process.poll() is None:
return True
return False
def killRunningProcess(name, recursive=False):
"""
Kill all process with name
"""
for process in SLAPRUNNER_PROCESS_LIST:
if process.name == name:
process.kill(recursive=recursive)
def handler(sig, frame):
"""
Signal handler to kill all process
"""
pid = os.getpid()
os.kill(-pid, sig)
sys.exit()
def setHandler(sig_list=None):
if sig_list is None:
sig_list = [signal.SIGTERM]
for sig in sig_list:
signal.signal(sig, handler)
This diff is collapsed.
......@@ -60,6 +60,7 @@ UL.jqueryFileTree A:hover {
background-color: white;
border: 1px solid #BBBBBB;
}
div.browser div.gs_dir_content_files{min-height:330px;}
#curDir {
height: 30px;
......@@ -124,7 +125,7 @@ UL.jqueryFileTree A:hover {
font-weight: bold;
}
.gs_head{padding: 10px 5px 10px 0;}
.gs_title{padding-left: 10px; margin:5px 5px 0 0; background: #e4e4e4;}
.gs_title{padding-left: 10px; margin:5px 5px 0 0; background: #e4e4e4; height:30px;}
.rowSelected {
color: #FFF;
background-color: #c2c2c2;
......@@ -133,6 +134,7 @@ UL.jqueryFileTree A:hover {
.rowSelected a {
color: #FFF;
}
.pathlink {cursor: pointer; font-size: 13px; margin-right: 2px; margin-left: 2px;}
.gs_delimiter {
height: 16px;
......
......@@ -2,7 +2,7 @@
background: #e4e4e4;
padding:3px;
/*position:relative;*/
width:757px;
width:930px;
font-size: 14px;
border-radius: 4px 4px 0 0;
}
......@@ -10,9 +10,9 @@
#tabContaier textarea {
width:702px;
}
#tabContaier textarea.slap{white-space: pre-wrap;word-wrap: break-word;overflow: hidden;color: #6F6F6F;width:430px; max-height:120px;
#tabContaier textarea.slap{white-space: pre-wrap;word-wrap: break-word;overflow: hidden;color: #6F6F6F;width:616px; max-height:120px;
resize: none; height:18px;padding:3px;min-height:18px;font-size: 13px;}
#tabContaier textarea.mb_style{width:560px;}
#tabContaier textarea.mb_style{width:713px;}
#tabContaier > ul{
overflow:hidden;
height:34px;
......
......@@ -28,7 +28,7 @@ td{
border-right: 1px solid #A8A8A8;
}
td.propertie{padding-left:10px; color:blue;width: 178px;}
.slapvalues{display:block;width: 375px;word-wrap: break-word}
.slapvalues{display:block;width: 522px;word-wrap: break-word}
td.first{border-left: 1px solid #A8A8A8;}
th{
background: #2281C1;
......@@ -39,7 +39,7 @@ th{
}
table.small th{padding: 4px;font-size: 16px;}
textarea {
width:762px;
width:932px;
font-family: 'Helvetica Neue',Tahoma,Helvetica,Arial,sans-serif;
}
......@@ -54,8 +54,8 @@ overflow-y: scroll;
#page
{
margin: 20px auto;
width: 841px;
margin: 10px auto;
width: 1014px;
}
#logo{
......@@ -64,8 +64,8 @@ overflow-y: scroll;
#header{
height: 78px;
padding-top: 15px;
width: 847px;
padding-top: 12px;
width: 1014px;
background: url(../images/head.png) no-repeat;
}
......@@ -86,7 +86,7 @@ overflow-y: scroll;
font-weight: normal;
padding-top: 3px;
float: left;
width: 656px;
width: 820px;
height: 22px;
text-align: center;
color: #4c6172;
......@@ -114,16 +114,12 @@ overflow-y: scroll;
}
.wmenu{
margin: 1px 0 1px 20px;
}
.wmenu ul{
list-style:none;
margin:0;
margin-top:1px;
padding:0;
margin-left:20px;
height: 36px;
height: 34px;
overflow:hidden;
}
.space{
......@@ -132,7 +128,6 @@ overflow-y: scroll;
.wmenu li{
float:left;
background: url(../images/sep.png) left center no-repeat;
}
.wmenu li .title_software{
......@@ -146,7 +141,7 @@ overflow-y: scroll;
padding-left: 20px;
padding-right: 5px;
margin-left:4px;
height: 20px;
height: 18px;
text-shadow:1px 1px 0 #E6EDF2;
}
......@@ -165,20 +160,23 @@ overflow-y: scroll;
text-shadow:1px 1px 0 #E6EDF2;
}
.wmenu ul li.sep{border-right: 1px solid #c2c2c2; min-width:20px; height:34px}
.wmenu ul li a{
display:block;
height: 20px;
Color:#000;
font-size:14px;
Color:#275777;
/*background: url(../images/sep.png) right center no-repeat;*/
border-right: 1px solid #c2c2c2;
/*font-weight:bold;*/
font-size:15px;
text-decoration:none;
padding:8px;
padding-left: 6px;
padding:7px 10px 7px 10px;
}
.wmenu ul li:last-child a {border: none}
.wmenu ul li a:hover, .wmenu ul li a.active{
color:#0271BF;
background:url(../images/menu_hover.png) bottom repeat-x;
color: #000;/*#0271BF;*/
background:#c2c2c2;
}
#main
......@@ -191,7 +189,7 @@ overflow-y: scroll;
.main_content{
position:relative;
width: 100%;
width: 99.6%;
height: 430px;
margin-top:10px;
border:1px solid #4c6172;
......@@ -201,12 +199,12 @@ overflow-y: scroll;
.main_head{
height: 15px;
background: url(../images/main_top.png) no-repeat;
width: 794px;
width: 966px;
}
.content{
background: url(../images/content.png) repeat-y;
width: 764px;
width: 936px;
padding: 15px;
padding-top:0;
padding-bottom:0;
......@@ -229,16 +227,16 @@ overflow-y: scroll;
.main_foot{
height: 15px;
background: url(../images/main_bottom.png) no-repeat;
width: 794px;
width: 966px;
}
#footer{
height: 35px;
width: 767px;
width: 934px;
background: url(../images/footer_bg.png) no-repeat;
padding-left: 40px;
padding-right: 40px;
padding-top: 5px;
padding-top: 4px;
text-align: center;
color: #4c6172;
text-shadow: 0px 1px 1px #fff;
......@@ -319,7 +317,8 @@ input[type="radio"], input[type="checkbox"]{
border: 2px solid #87B0D4;
padding: 0;
color: #4c6172;
margin: 15px 59px 15px 59px;
margin: 20px auto;
width: 641px;
}
#home_box a{
......@@ -369,14 +368,14 @@ input[type="radio"], input[type="checkbox"]{
.lmenu{
display: block;
height: 80px;
margin: 10px 45px 10px 45px;
margin: 10px 0 10px 45px;
padding: 10px;
padding-bottom:15px;
width: 530px;
border: 1px solid #678dad;
}
.smaller{margin-left:10px; width: 350px; float:right}
.smaller{margin-left:10px; width: 350px; float:left}
.smaller p{width: 280px;}
.umenu{display: block;margin: 10px 0 10px 45px; width: 147px; float:left;border: 1px solid #678dad;
padding: 10px;height: 80px;padding-bottom:15px;}
......@@ -398,7 +397,6 @@ padding: 10px;height: 80px;padding-bottom:15px;}
.sright_menu{
display: block;
height: 80px;
margin: 0 45px 0 0;
padding: 10px;
padding-bottom:15px;
border: #678dad;
......@@ -415,7 +413,7 @@ padding: 10px;height: 80px;padding-bottom:15px;}
}
.file_tree {
width: 752px;
width: 923px;
height: 300px;
border: solid 1px #678dad;
background: #fff;
......@@ -433,28 +431,30 @@ padding: 10px;height: 80px;padding-bottom:15px;}
}
.file_tree_short{
width: 352px;
height: 170px;
width: 228px;
height: 379px;
border: solid 1px #678dad;
background: #fff;
overflow: auto;
padding: 5px;
float:left;
}
.box_software{
width: 362px;
height: 100px;
width: 240px;
background: #fff;
padding: 5px;
float:right;
}
.software_details{float: left;}
#details_box{
display:none;
display:block;
margin-top:10px;
}
#code{
float: right;
width: 692px;
}
#details_head{margin-bottom: 10px;}
#contentInfo{
width: 756px;
width: 926px;
border: solid 1px #678dad;
background: #fff;
overflow: auto;
......@@ -490,10 +490,6 @@ h2.hight:hover{
cursor: pointer;
}
.software_details{
padding: 10px;
}
.log_content{
border: solid 1px #4c6172;
padding: 2px;
......@@ -503,13 +499,17 @@ h2.hight:hover{
border: none;
background: #f6f7f8;
color: #000;
width: 754px;
width: 926px;
padding: 2px;
height: 450px;
font-size: 13px;
overflow-y: auto;
white-space: pre-wrap;
}
.log_btn{border: 1px solid #678dad; border-top:none; height: 22px; width: 654px; margin: 0 40px 10px 40px;
padding:4px 10px 4px 10px; font-size: 16px; color: #4c6172;}
.log p{white-space: pre-wrap; width:100%}
.log p.info{white-space: pre-wrap; width:98%; font-size: 15px; margin: 5px; color:red;}
.waitting{
margin-left: 10px;
......@@ -557,7 +557,11 @@ h2.hight:hover{
margin: 10px;
margin-top: 20px;
}
label.header {
color: #4C6172;
font-size: 18px;
font-weight: normal;
}
select {
-webkit-appearance: button;
-webkit-border-radius: 2px;
......@@ -655,7 +659,8 @@ a.lshare img{
.form input[type=text] ,.form input[type=password] {float:left; width:190px;margin:5px;}
.hiddendiv {display: none;white-space: pre-wrap;min-height: 18px;font-size: 13px;
padding:3px;word-wrap: break-word;width:430px; max-height:120px;font-family: 'Helvetica Neue',Tahoma,Helvetica,Arial,sans-serif;}
.list{background: url(../images/menu_dropdown.png) left center no-repeat; padding-left:10px;}
.list{display: block;padding: 5px;background: #E7E7E7; margin-bottom:7px;}
div.sep{display:block; height:7px;}
.slidebox{padding:10px; }
.alert_message{ background: url(../images/alert.png) center no-repeat; height: 26px;}
.error_message{ background: url(../images/exit.png) center no-repeat; height: 26px;}
......@@ -665,10 +670,10 @@ a.lshare img{
#pClose, .close{background:url(../images/close.png) no-repeat 0px 0px; display:block; width:22px; height:22px; cursor:pointer}
#pClose:hover, .close:hover{background:url(../images/close_hover.png) no-repeat 0px 0px;}
.md5sum {margin:10px; font-size:15px;}
.title{background: #e4e4e4; width: 100%; height: 25px; padding-top:2px; text-indent: 5px; color: #737373; text-shadow: 0px 1px #FFF;}
.menu-box-left{float:left; width: 120px; font-size:14px; background: #e4e4e4; padding:5px 0 5px 5px; margin-top:10px;
.title{background: #e4e4e4; width: 100%; height: 26px; padding-top:2px; text-indent: 5px; color: #737373; text-shadow: 0px 1px #FFF;}
.menu-box-left{float:left; width: 135px; font-size:14px; background: #e4e4e4; padding:5px 0 5px 5px; margin-top:10px;
font-size:14px; border-radius: 4px 0 0 4px;}
.menu-box-right{background: #e4e4e4; padding: 5px; float:right; width: 634px; margin-left: -5px;
.menu-box-right{background: #e4e4e4; padding: 5px; float:right; width: 745px; margin-left: -5px;
margin-top:10px; box-shadow: 1px 1px 1px #888888;}
.menu-box-left ul{margin:0px; list-style:none;}
.menu-box-left li{padding: 2px; padding-left:10px; padding-right:10px; text-shadow: 0px 1px #fff;border-bottom:1px solid #fff;}
......@@ -690,10 +695,14 @@ a.lshare img{
.popup td.top img { display: block; }
.popup td#bottomright { background-image: url(../images/bubble-1.png); }
.popup-contents {background: #fff; color: #666666;}
.popup a{display: block; font-weight:bold; color: #4DA0C6;}
.popup a{display: block; font-weight:bold; color: #4DA0C6; padding-left: 5px; padding-bottom: 5px;}
.popup a:hover{color: #666666;}
.popup ul{margin:0; padding:0; list-style:none;}
.popup li{border-bottom: 1px dashed #666666; padding:5px; padding-top:5px;}
.popup ul{margin:0; margin-bottom:10px; padding:0; list-style:none;}
.popup li{border-bottom: 1px dashed #666666; padding:0;}
.popup ul li:last-child{border-bottom:none}
.popup ul li a{padding-bottom:0}
ul.menu li {padding-top:5px; padding-bottom:5px;}
ul.menu{margin-bottom:0;}
.popup-value{display:none;}
textarea.parameter {border: solid 1px #678dad; color: #666666; height:110px;}
.link{color:#fff; font-weight:bold; text-decoration:none}
......
slapos/runner/static/images/content.png

192 Bytes | W: | H:

slapos/runner/static/images/content.png

195 Bytes | W: | H:

slapos/runner/static/images/content.png
slapos/runner/static/images/content.png
slapos/runner/static/images/content.png
slapos/runner/static/images/content.png
  • 2-up
  • Swipe
  • Onion skin
slapos/runner/static/images/footer_bg.png

984 Bytes | W: | H:

slapos/runner/static/images/footer_bg.png

1.08 KB | W: | H:

slapos/runner/static/images/footer_bg.png
slapos/runner/static/images/footer_bg.png
slapos/runner/static/images/footer_bg.png
slapos/runner/static/images/footer_bg.png
  • 2-up
  • Swipe
  • Onion skin
slapos/runner/static/images/head.png

1.27 KB | W: | H:

slapos/runner/static/images/head.png

1.4 KB | W: | H:

slapos/runner/static/images/head.png
slapos/runner/static/images/head.png
slapos/runner/static/images/head.png
slapos/runner/static/images/head.png
  • 2-up
  • Swipe
  • Onion skin
slapos/runner/static/images/main_bg_all.png

236 Bytes | W: | H:

slapos/runner/static/images/main_bg_all.png

215 Bytes | W: | H:

slapos/runner/static/images/main_bg_all.png
slapos/runner/static/images/main_bg_all.png
slapos/runner/static/images/main_bg_all.png
slapos/runner/static/images/main_bg_all.png
  • 2-up
  • Swipe
  • Onion skin
slapos/runner/static/images/main_bottom.png

413 Bytes | W: | H:

slapos/runner/static/images/main_bottom.png

421 Bytes | W: | H:

slapos/runner/static/images/main_bottom.png
slapos/runner/static/images/main_bottom.png
slapos/runner/static/images/main_bottom.png
slapos/runner/static/images/main_bottom.png
  • 2-up
  • Swipe
  • Onion skin
slapos/runner/static/images/main_top.png

374 Bytes | W: | H:

slapos/runner/static/images/main_top.png

379 Bytes | W: | H:

slapos/runner/static/images/main_top.png
slapos/runner/static/images/main_top.png
slapos/runner/static/images/main_top.png
slapos/runner/static/images/main_top.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -465,7 +465,7 @@ if (jQuery) (function(jQuery){
var fileshtml = '';
var gs_lastparent = jQuery('#' + jQuery("#curDir").attr('rel')).parent().parent().parent().children('a');
if (gs_lastparent.length > 0) {
fileshtml += "<tr><td class='first'><div class='directory directory_info gsItem' rel=\'up\'><a href='javascript:void(0)' onclick=\"jQuery('#" + jQuery("#curDir").attr('rel')+ "').parent().parent().parent().children('a').trigger('click'); return false\"> parent...</a></div></td align='center'><td align='center'>Folder</td><td align='center'>-</td><td align='center'>-</td></tr>";
fileshtml += "<tr><td class='first'><div class='directory directory_info gsItem' rel=\'up\'><a href='javascript:void(0)' onclick=\"jQuery('#" + jQuery("#curDir").attr('rel')+ "').parent().parent().parent().children('a').trigger('click'); return false\"> ..</a></div></td align='center'><td align='center'>Folder</td><td align='center'>-</td><td align='center'>-</td></tr>";
}
if (gsfiless.length > 0) {
for (var numf in gsfiless) {
......@@ -525,6 +525,21 @@ if (jQuery) (function(jQuery){
}
function splitPath(path) {
var list = path.split('/'),
html = "";
for (var i=0; i<list.length; i++){
var subList = new Array();
if (list[i] !== '') {
for (var j=0; j<=i; j++){
subList.push(list[j]);
}
html += "<a class='pathlink' rel='"+subList.join('/')+"/'>"+list[i]+"</a>/";
}
}
return html;
}
function showTree(c, t) {
var cObject = jQuery(c);
cObject.addClass('wait');
......@@ -541,7 +556,8 @@ if (jQuery) (function(jQuery){
success: function(data) {
//remember current dir id
jQuery("#curDir").html(unescape(t));
jQuery("#curDir").html(splitPath(unescape(t)));
jQuery("#curDir").attr('val', unescape(t));
jQuery("#curDir").attr('rel', jQuery('a', cObject).attr('id'));
gs_cur_items = new Array();
......@@ -587,6 +603,9 @@ if (jQuery) (function(jQuery){
jQuery(t).find('LI > A').bind('click', function () {
showTree (jQuery(this).parent(), encodeURIComponent(jQuery(this).attr('rel').match( /.*\// )));
});
jQuery('a.pathlink').bind('click', function () {
showTree( jQuery('#gs_dir_list'), jQuery(this).attr('rel'));
});
}
function showRoot(){
......@@ -630,7 +649,7 @@ if (jQuery) (function(jQuery){
});
return false;
}
var curDir = jQuery("#curDir").html();
var curDir = jQuery("#curDir").attr('val');
var dataForSend = null;
var gsitem = gs_get_cur_item(jQuery(this).attr('rel'));
......
This diff is collapsed.
......@@ -45,7 +45,7 @@ $(function () {
$('.popup').css('display', 'none');
shown = false;
});
}, hideDelay)
}, hideDelay);
return false;
});
});
\ No newline at end of file
......@@ -8,11 +8,11 @@
$.extend($.fn, {
Popup: function(msg, option) {
var h;
if (option.type == undefined) option.type = "info";
if (option.closebtn == undefined) option.closebtn = false;
if (option.duration == undefined) option.duration = 0;
if (option.load == undefined) option.load = false;
$box = $(this);
if (option.type === undefined) option.type = "info";
if (option.closebtn === undefined) option.closebtn = false;
if (option.duration === undefined) option.duration = 0;
if (option.load === undefined) option.load = false;
var $box = $(this);
if(showDelayTimer){clearTimeout(showDelayTimer);}
if(isShow){
$box.fadeOut('normal', function() {
......@@ -21,8 +21,8 @@
}
else{setupBox();}
function setupBox(){
if (msg == undefined){
msg = "Cannot execute your request. Please make sure you are logged in!!"
if (msg === undefined){
msg = "Cannot execute your request. Please make sure you are logged in!!";
option.type = "error";
}
$box.empty();
......@@ -40,7 +40,7 @@
close();
});
showBox();
if(option.duration != 0){
if(option.duration !== 0){
showDelayTimer = setTimeout(function(){
showDelayTimer = null;
close();
......
$(document).ready( function() {
/*jslint undef: true */
/*global $, document, window, $SCRIPT_ROOT */
/* vim: set et sts=4: */
$(document).ready(function () {
"use strict";
var send = false;
$("#update").click(function(){
var haspwd = false;
var hasAccount = !($("input#hasAccount").val() === "");
if($("input#username").val() === "" || !$("input#username").val().match(/^[\w\d\._-]+$/)){
$("#error").Popup("Invalid user name. Please check it!", {type:'alert', duration:3000});
$("#update").click(function () {
var haspwd = false,
hasAccount = ($("input#hasAccount").val() !== "");
if ($("input#username").val() === "" || !$("input#username").val().match(/^[\w\d\._\-]+$/)) {
$("#error").Popup("Invalid user name. Please check it!", {type: 'alert', duration: 3000});
return false;
}
else if ($("input#username").val().length <6){
$("#error").Popup("Username must have at least 6 characters", {type:'alert', duration:3000});
if ($("input#username").val().length < 6) {
$("#error").Popup("Username must have at least 6 characters", {type: 'alert', duration: 3000});
return false;
}
if($("input#name").val() === ""){
$("#error").Popup("Please enter your name and surname!", {type:'alert', duration:3000});
if ($("input#name").val() === "") {
$("#error").Popup("Please enter your name and surname!", {type: 'alert', duration: 3000});
return false;
}
if(!$("input#email").val().match(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/)){
$("#error").Popup("Please enter a valid email adress!", {type:'alert', duration:3000});
if (!$("input#email").val().match(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/)) {
$("#error").Popup("Please enter a valid email adress!", {type: 'alert', duration: 3000});
return false;
}
if(!hasAccount && !$("input#password").val().match(/^[\w\d\._-]+$/)){
$("#error").Popup("Please enter your new password!", {type:'alert', duration:3000});
if (!hasAccount && !$("input#password").val()) {
$("#error").Popup("Please enter your new password!", {type: 'alert', duration: 3000});
return false;
}
if ($("input#password").val() !== "" && $("input#password").val().length <6){
$("#error").Popup("The password must have at least 6 characters", {type:'alert', duration:3000});
if ($("input#password").val() !== "" && $("input#password").val().length < 6) {
$("#error").Popup("The password must have at least 6 characters", {type: 'alert', duration: 3000});
return false;
}
if($("input#password").val() !== ""){
if($("input#password").val() === "" || !$("input#password").val().match(/^[\w\d\._-]+$/)){
$("#error").Popup("Please enter your new password!", {type:'alert', duration:3000});
if ($("input#password").val() !== "") {
if ($("input#password").val() === "" || !$("input#password").val()) {
$("#error").Popup("Please enter your new password!", {type: 'alert', duration: 3000});
return false;
}
if($("input#password").val() !== $("input#cpassword").val()){
$("#error").Popup("your password does not match!", {type:'alert', duration:3000});
if ($("input#password").val() !== $("input#cpassword").val()) {
$("#error").Popup("your password does not match!", {type: 'alert', duration: 3000});
return false;
}
haspwd = true;
}
if(!$("input#rcode").val().match(/^[\w\d]+$/)){
$("#error").Popup("Please enter your password recovery code.", {type:'alert', duration:3000});
if (!$("input#rcode").val().match(/^[\w\d]+$/)) {
$("#error").Popup("Please enter your password recovery code.", {type: 'alert', duration: 3000});
return false;
}
if (send) {
return false;
}
if(send) return false;
send = true;
$.ajax({
type: "POST",
url: $SCRIPT_ROOT + ((hasAccount)? '/updateAccount':'/configAccount'),
data: {name: $("input#name").val(), username:$("input#username").val(), email:$("input#email").val(),
password:((haspwd) ? $("input#password").val():""), rcode:$("input#rcode").val()},
success: function(data){
if(data.code ==1){
location.href = $SCRIPT_ROOT+"/"
}
else{
$("#error").Popup(data.result, {type:'error', duration:5000});
url: $SCRIPT_ROOT + ((hasAccount) ? '/updateAccount' : '/configAccount'),
data: {
name: $("input#name").val(),
username: $("input#username").val(),
email: $("input#email").val(),
password: ((haspwd) ? $("input#password").val() : ""),
rcode: $("input#rcode").val()
},
success: function (data) {
if (data.code === 1) {
window.location.href = $SCRIPT_ROOT + "/";
} else {
$("#error").Popup(data.result, {type: 'error', duration: 5000});
}
send = false;
},
error:function(){send = false;}
error: function () { send = false; }
});
return false;
});
......
/*jslint undef: true */
/*global $, window, $SCRIPT_ROOT */
/* vim: set et sts=4: */
/*Common javascript function*/
String.prototype.toHtmlChar = function(){
var c = {'<':'&lt;', '>':'&gt;', '&':'&amp;', '"':'&quot;', "'":'&#039;',
'#':'&#035;' };
return this.replace( /[<&>'"#]/g, function(s) { return c[s]; } );
String.prototype.toHtmlChar = function () {
"use strict";
var c = {
'<': '&lt;',
'>': '&gt;',
'&': '&amp;',
'"': '&quot;',
"'": '&#039;',
'#': '&#035;'
};
return this.replace(/[<&>'"#]/g, function (s) { return c[s]; });
};
String.prototype.trim = function () {
"use strict";
return this.replace(/^\s*/, "").replace(/\s*$/, "");
};
/****************************************/
function setInput($elt) {
if(!$elt){$elt = $('input[type="text"], input[type="password"]');}
"use strict";
if (!$elt) {
$elt = $('input[type="text"], input[type="password"]');
}
$elt.addClass("idleField");
$elt.focus(function() {
$elt.focus(function () {
$(this).removeClass("idleField").addClass("focusField");
if (this.value == this.defaultValue){
if (this.value === this.defaultValue) {
this.value = '';
}
if(this.value != this.defaultValue){
if (this.value !== this.defaultValue) {
this.select();
}
});
$elt.blur(function() {
$elt.blur(function () {
$(this).removeClass("focusField").addClass("idleField");
if ($.trim(this.value) === ''){
this.value = (this.defaultValue ? this.defaultValue : '');
if ($.trim(this.value) === '') {
this.value = (this.defaultValue || '');
}
});
}
/*******************Bind remove all button*******************/
function bindRemove(){
$("a#removeSr").click(function(){
if(!window.confirm("Do you really want to remove all software release?")){
function bindRemove() {
"use strict";
$("a#removeSr").click(function () {
if (!window.confirm("Do you really want to remove all software release?")) {
return false;
}
location.href = $SCRIPT_ROOT + '/removeSoftware';
window.location.href = $SCRIPT_ROOT + '/removeSoftware';
});
$("a#removeIst").click(function(){
if(!window.confirm("Do you really want to remove all computer partition?")){
$("a#removeIst").click(function () {
if (!window.confirm("Do you really want to remove all computer partition?")) {
return false;
}
location.href = $SCRIPT_ROOT + '/removeInstance';
window.location.href = $SCRIPT_ROOT + '/removeInstance';
});
}
/**************************/
(function ($, document, window) {
"use strict";
$.extend($.fn, {
slideBox: function(state) {
if (!state) state = "hide";
var header = $("#"+$(this).attr('id')+">h2");
var box = $("#"+$(this).attr('id')+">div");
slideBox: function (state) {
if (!state) {
state = "hide";
}
var header = $("#" + $(this).attr('id') + ">h2"),
box = $("#" + $(this).attr('id') + ">div");
header.addClass(state);
if(state=="hide"){box.css('display', 'none');}
header.click(function(){
if (state === "hide") {
box.css('display', 'none');
}
header.click(function () {
var state = box.css("display");
if (state == "none"){
if (state === "none") {
box.slideDown("normal");
header.removeClass("hide");
header.addClass("show");
}
else{
} else {
box.slideUp("normal");
header.removeClass("show");
header.addClass("hide");
......
/*jslint undef: true */
/*global document, escape, unescape */
/* vim: set et sts=4: */
/*Cookies Management*/
function setCookie(name,value,expires,path,domain,secure){
if (!expires){
var today = new Date();
expires = new Date(today.getTime() + 365 * 24 * 60 * 60 * 1000);
function getCookie(name) {
"use strict";
var i,
x,
y,
result,
ARRcookies = document.cookie.split(";");
for (i = 0; i < ARRcookies.length; i += 1) {
x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("="));
y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1);
x = x.replace(/^\s+|\s+$/g, "");
if (x === name) {
result = unescape(y);
if (result !== "" && result !== null) {
return result;
}
document.cookie = name + "=" + escape(value) +
"; expires=" + expires.toGMTString() +
((path) ? "; path=" + path : "/") +
((domain) ? "; domain=" + domain : "") +
((secure) ? "; secure" : "");
return null;
}
}
return null;
}
function deleteCookie(name,path,domain) {
function deleteCookie(name, path, domain) {
"use strict";
if (getCookie(name)) {
document.cookie = name + "=" +
((path) ? "; path=" + path : "/") +
((domain) ? "; domain=" + domain : "") +
(path ? "; path=" + path : "/") +
(domain ? "; domain=" + domain : "") +
"; expires=Thu, 01-Jan-70 00:00:01 GMT";
}
}
function getCookie(name) {
var i,x,y,ARRcookies=document.cookie.split(";");
for (i=0;i<ARRcookies.length;i++){
x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
x=x.replace(/^\s+|\s+$/g,"");
if (x==name){
var result = unescape(y);
if (result != "" && result != null){
return result;
}
return null;
function setCookie(name, value, expires, path, domain, secure) {
"use strict";
if (getCookie(name) !== null){
deleteCookie(name);
}
if (!expires) {
var today = new Date();
expires = new Date(today.getTime() + 365 * 24 * 60 * 60 * 1000);
}
return null;
document.cookie = name + "=" + escape(value) +
"; expires=" + expires.toGMTString() +
((path) ? "; path=" + path : "/") +
((domain) ? "; domain=" + domain : "") +
((secure) ? "; secure" : "");
}
/**************************/
$(document).ready( function() {
var editor = ace.edit("editor");
editor.setTheme("ace/theme/crimson_editor");
/*jslint undef: true */
/*global $, document, ace, $SCRIPT_ROOT */
/* vim: set et sts=4: */
var CurentMode = require("ace/mode/buildout").Mode;
editor.getSession().setMode(new CurentMode());
editor.getSession().setTabSize(2);
editor.getSession().setUseSoftTabs(true);
editor.renderer.setHScrollBarAlwaysVisible(false);
var file = $("input#profile").val();
var workdir = $("input#workdir").val();
var edit = false;
var send = false;
selectFile(file);
$(document).ready(function () {
"use strict";
$("#save").click(function(){
if(!edit){
$("#error").Popup("Can not load your file, please make sure that you have selected a Software Release", {type:'alert', duration:5000});
return false;
}
if (send) return;
send =true
$.ajax({
type: "POST",
url: $SCRIPT_ROOT + '/saveFileContent',
data: {file: file, content: editor.getSession().getValue()},
success: function(data){
if(data.code == 1){
$("#error").Popup("File Saved!", {type:'confirm', duration:2000});
}
else{
$("#error").Popup(data.result, {type:'error', duration:5000});
}
send = false;
}
});
return false;
});
$("#getmd5").click(function(){
getmd5sum();
return false;
});
$("#adddevelop").click(function(){
var developList = new Array();
var i=0;
$("#plist li").each(function(index){
var elt = $(this).find("input:checkbox");
if (elt.is(":checked")){
developList[i] = workdir+"/"+elt.val();
i++;
elt.attr("checked", false);
}
});
if (developList.length > 0){setDevelop(developList);}
return false;
});
var editor, CurrentMode, file, workdir, edit, send;
function selectFile(file){
function selectFile(file) {
edit = false;
$.ajax({
type: "POST",
url: $SCRIPT_ROOT + '/getFileContent',
data: "file=" + file,
success: function(data){
if(data.code == 1){
success: function (data) {
if (data.code === 1) {
editor.getSession().setValue(data.result);
edit = true;
}
else{
$("#error").Popup("Can not load your file, please make sure that you have selected a Software Release", {type:'alert', duration:5000});
} else {
$("#error").Popup("Can not load your file, please make sure that you have selected a Software Release",
{type: 'alert', duration: 5000});
}
}
});
return;
}
function getmd5sum(){
if (send) return;
send =true
function getmd5sum() {
if (send) {
return;
}
send = true;
$.ajax({
type: "POST",
url: $SCRIPT_ROOT + '/getmd5sum',
data: {file: file},
success: function(data){
if(data.code == 1){
success: function (data) {
if (data.code === 1) {
$("#md5sum").empty();
$("#md5sum").append('md5sum : <span>' + data.result + '</span>');
}
else{
$("#error").Popup(data.result, {type:'error', duration:5000});
} else {
$("#error").Popup(data.result, {type: 'error', duration: 5000});
}
send = false;
}
});
}
function setDevelop(developList){
if (developList==null || developList.length <= 0) return;
editor.navigateFileStart();
editor.find('buildout',{caseSensitive: true,wholeWord: true});
if(!editor.getSelectionRange().isEmpty()){
//editor.find("",{caseSensitive: true,wholeWord: true,regExp: true});
//if(!editor.getSelectionRange().isEmpty()){
//alert("found");
//}
//else{alert("no found");
//}
function setDevelop(developList) {
if (developList === null || developList.length <= 0) {
return;
}
else{
$("#error").Popup("Can not found part [buildout]! Please make sure that you have a cfg file", {type:'alert', duration:3000});
editor.navigateFileStart();
editor.find('buildout', {caseSensitive: true, wholeWord: true});
if (editor.getSelectionRange().isEmpty()) {
$("#error").Popup("Can not found part [buildout]! Please make sure that you have a cfg file",
{type: 'alert', duration: 3000});
return;
}
//else {
// //editor.find("",{caseSensitive: true,wholeWord: true,regExp: true});
// //if (!editor.getSelectionRange().isEmpty()) {
// //alert("found");
// //}
// //else{alert("no found");
// //}
//}
editor.navigateLineEnd();
$.post($SCRIPT_ROOT+"/getPath", {file:developList.join("#")}, function(data) {
if(data.code==1){
var result = data.result.split('#');
$.post($SCRIPT_ROOT + "/getPath", {file: developList.join("#")}, function (data) {
if (data.code === 1) {
var i,
result = data.result.split('#');
editor.insert("\ndevelop =\n\t" + result[0] + "\n");
for(var i=1; i<result.length; i++)
for (i = 1; i < result.length; i += 1) {
editor.insert("\t" + result[i] + "\n");
}
}
})
.error(function() { })
.complete(function(){});
.error(function () { })
.complete(function () {});
editor.insert("\n");
}
editor = ace.edit("editor");
CurrentMode = require("ace/mode/buildout").Mode;
file = $("input#profile").val();
workdir = $("input#workdir").val();
edit = false;
send = false;
editor.setTheme("ace/theme/crimson_editor");
editor.getSession().setMode(new CurrentMode());
editor.getSession().setTabSize(2);
editor.getSession().setUseSoftTabs(true);
editor.renderer.setHScrollBarAlwaysVisible(false);
selectFile(file);
$("#save").click(function () {
if (!edit) {
$("#error").Popup("Can not load your file, please make sure that you have selected a Software Release",
{type: 'alert', duration: 5000});
return false;
}
if (send) {
return;
}
send = true;
$.ajax({
type: "POST",
url: $SCRIPT_ROOT + '/saveFileContent',
data: {file: file, content: editor.getSession().getValue()},
success: function (data) {
if (data.code === 1) {
$("#error").Popup("File Saved!", {type: 'confirm', duration: 2000});
} else {
$("#error").Popup(data.result, {type: 'error', duration: 5000});
}
send = false;
}
});
return false;
});
$("#getmd5").click(function () {
getmd5sum();
return false;
});
$("#adddevelop").click(function () {
var developList = [],
i = 0;
$("#plist li").each(function (index) {
var elt = $(this).find("input:checkbox");
if (elt.is(":checked")) {
developList[i] = workdir + "/" + elt.val();
i += 1;
elt.attr("checked", false);
}
});
if (developList.length > 0) {
setDevelop(developList);
}
return false;
});
});
$(document).ready( function() {
var send = false;
var cloneRequest;
$('#fileNavigator').gsFileManager({ script: $SCRIPT_ROOT+"/fileBrowser", root: "workspace/"});
/*jslint undef: true */
/*global $, document, $SCRIPT_ROOT */
/* vim: set et sts=4: */
$(document).ready(function () {
"use strict";
function configRadio() {
$("#modelist li").each(function (index) {
var boxselector = "#box" + index;
if ($(this).hasClass('checked')) {
$(this).removeClass('checked');
$(boxselector).slideUp("normal");
}
if ($(this).find("input:radio").is(':checked')) {
$(this).addClass('checked');
//change content here
$(boxselector).slideDown("normal");
}
if (index !== 2) {
$("input#password").val("");
$("input#cpassword").val("");
}
});
}
var send = false,
cloneRequest;
$('#fileNavigator').gsFileManager({ script: $SCRIPT_ROOT + "/fileBrowser", root: "workspace/"});
configRadio();
$("input#nothing").change(function(){
$("input#nothing").change(function () {
configRadio();
});
$("input#ssh").change(function(){
$("input#ssh").change(function () {
configRadio();
});
$("input#https").change(function(){
$("input#https").change(function () {
configRadio();
});
$("#clone").click(function(){
if(send){
$("#clone").click(function () {
if (send) {
cloneRequest.abort();
$("#imgwaitting").fadeOut('normal');
$("#clone").empty();
......@@ -21,51 +48,49 @@ $(document).ready( function() {
send = false;
return;
}
var repo_url = $("input#repo").val();
var email = "";
var name = "";
var repo_url = $("input#repo").val(),
email = "",
name = "";
/* /^(ht|f)tps?:\/\/[a-z0-9-\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?$/ */
if($("input#repo").val() === '' || !repo_url.match(/^[\w\d\.\/:~@_-]+$/)){
$("#error").Popup("Invalid url for the repository", {type:'alert', duration:3000});
if ($("input#repo").val() === '' || !repo_url.match(/^[\w\d\.\/:~@_\-]+$/)) {
$("#error").Popup("Invalid url for the repository", {type: 'alert', duration: 3000});
return false;
}
if($("input#name").val() === '' || !$("input#name").val().match(/^[\w\d\._-]+$/)){
$("#error").Popup("Invalid project name", {type:'alert', duration:3000});
if ($("input#name").val() === '' || !$("input#name").val().match(/^[\w\d\._\-]+$/)) {
$("#error").Popup("Invalid project name", {type: 'alert', duration: 3000});
return false;
}
if($("input#user").val() !== ""){
if ($("input#user").val() !== "") {
name = $("input#user").val();
}
if($("input#email").val() !== '' && $("input#email").val() !== "Enter your email adress..."){
if(!$("input#email").val().match(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/)){
$("#error").Popup("Please enter a valid email adress!", {type:'alert', duration:3000});
if ($("input#email").val() !== '' && $("input#email").val() !== "Enter your email adress...") {
if (!$("input#email").val().match(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/)) {
$("#error").Popup("Please enter a valid email adress!", {type: 'alert', duration: 3000});
return false;
}
email = $("input#email").val();
}
if($("input#https").is(':checked')){
if($("input#username").val() == "" || !$("input#username").val().match(/^[\w\d\._-]+$/)){
$("#error").Popup("Please enter a correct username", {type:'alert', duration:3000});
if ($("input#https").is(':checked')) {
if ($("input#username").val() === "" || !$("input#username").val().match(/^[\w\d\._\-]+$/)) {
$("#error").Popup("Please enter a correct username", {type: 'alert', duration: 3000});
return false;
}
if($("input#password").val() != ""){
if(repo_url.indexOf("https://") != -1){
if ($("input#password").val() !== "") {
if (repo_url.indexOf("https://") !== -1) {
repo_url = "https://" + $("input#username").val() +
":" + $("input#password").val() +
"@" + repo_url.substring(8);
}
else{
$("#error").Popup("The URL of your repository should start with 'https://'", {type:'alert', duration:3000});
} else {
$("#error").Popup("The URL of your repository should start with 'https://'", {type: 'alert', duration: 3000});
return false;
}
}
else{
$("#error").Popup("Please enter your password", {type:'alert', duration:3000});
} else {
$("#error").Popup("Please enter your password", {type: 'alert', duration: 3000});
return false;
}
}
else if(repo_url.indexOf("https://") != -1){
$("#error").Popup("Please select HTTPS Security Mode for this repository", {type:'alert', duration:3000});
} else if (repo_url.indexOf("https://") !== -1) {
$("#error").Popup("Please select HTTPS Security Mode for this repository", {type: 'alert', duration: 3000});
return false;
}
$("#imgwaitting").fadeIn('normal');
......@@ -75,27 +100,29 @@ $(document).ready( function() {
cloneRequest = $.ajax({
type: "POST",
url: $SCRIPT_ROOT + '/cloneRepository',
data: {repo: repo_url, name: ($("input#workdir").val() + "/" +
$("input#name").val()), email:email,
user:name},
success: function(data){
if(data.code == 1){
data: {
repo: repo_url,
name: $("input#workdir").val() + "/" + $("input#name").val(),
email: email,
user: name
},
success: function (data) {
if (data.code === 1) {
$("#file_navigation").fadeIn('normal');
$("#error").Popup("Your repository is cloned!", {type:'confirm', duration:3000});
$("#error").Popup("Your repository is cloned!", {type: 'confirm', duration: 3000});
$("input#repo").val("Enter the url of your repository...");
$("input#name").val("Enter the project name...");
$('#fileNavigator').gsFileManager({ script: $SCRIPT_ROOT+"/fileBrowser", root: "workspace"});
}
else{
$("#error").Popup(data.result, {type:'error'});
$('#fileNavigator').gsFileManager({ script: $SCRIPT_ROOT + "/fileBrowser", root: "workspace/"});
} else {
$("#error").Popup(data.result, {type: 'error'});
}
$("#imgwaitting").hide();
$("#clone").empty();
$("#clone").append("Clone");
send = false;
},
error: function(request,error) {
$("#error").Popup("unable to clone your project, please check your internet connection", {type:'error', duration:3000});
error: function (request, error) {
$("#error").Popup("unable to clone your project, please check your internet connection", {type: 'error', duration: 3000});
$("#imgwaitting").hide();
$("#clone").empty();
$("#clone").append("Clone");
......@@ -103,26 +130,8 @@ $(document).ready( function() {
});
return false;
});
function configRadio(){
$("#modelist li").each(function(index) {
var boxselector = "#box" + index;
if($(this).hasClass('checked')){
$(this).removeClass('checked');
$(boxselector).slideUp("normal");
}
if($(this).find("input:radio").is(':checked')){
$(this).addClass('checked');
//change content here
$(boxselector).slideDown("normal");
}
if(index != 2){
$("input#password").val("");
$("input#cpassword").val("");
}
});
}
function selectFile(file){
function selectFile(file) {
//nothing
return;
}
......
$(document).ready( function() {
var editor;
var send = false;
var runnerDir = $("input#runnerdir").val();
$("#reloadfiles").click(function(){
/*jslint undef: true */
/*global $, document, window, $SCRIPT_ROOT, ace */
/* vim: set et sts=4: */
$(document).ready(function () {
"use strict";
var editor,
send = false,
runnerDir = $("input#runnerdir").val();
function fillContent() {
$('#fileNavigator').gsFileManager({script: $SCRIPT_ROOT + "/fileBrowser", root: runnerDir});
}
$("#reloadfiles").click(function () {
fillContent();
});
fillContent();
function fillContent(){
$('#fileNavigator').gsFileManager({ script: $SCRIPT_ROOT+"/fileBrowser", root: runnerDir});
}
$("#open").click(function(){
$("#open").click(function () {
var elt = $("option:selected", $("#softwarelist"));
if(elt.val() === "No Software Release found"){
$("#error").Popup("Please select your Software Release", {type:'alert', duration:5000});
if (elt.val() === "No Software Release found") {
$("#error").Popup("Please select your Software Release", {type: 'alert', duration: 5000});
return false;
}
$.ajax({
type: "POST",
url: $SCRIPT_ROOT + '/setCurrentProject',
data: "path=" + elt.attr('rel'),
success: function(data){
if(data.code == 1){
location.href = $SCRIPT_ROOT + '/editSoftwareProfile'
}
else{
$("#error").Popup(data.result, {type:'error', duration:5000});
success: function (data) {
if (data.code === 1) {
window.location.href = $SCRIPT_ROOT + '/editSoftwareProfile';
} else {
$("#error").Popup(data.result, {type: 'error', duration: 5000});
}
}
});
return false;
});
$("#delete").click(function(){
if($("#softwarelist").val() === "No Software Release found"){
$("#error").Popup("Please select your Software Release", {type:'alert', duration:5000});
$("#delete").click(function () {
if ($("#softwarelist").val() === "No Software Release found") {
$("#error").Popup("Please select your Software Release", {type: 'alert', duration: 5000});
return false;
}
if(send) return;
if(!window.confirm("Do you really want to delete this software release?")){
if (send) {
return;
}
if (!window.confirm("Do you really want to delete this software release?")) {
return;
}
send = false;
......@@ -47,24 +56,28 @@ $(document).ready( function() {
$.ajax({
type: "POST",
url: $SCRIPT_ROOT + '/removeSoftwareDir',
data: {md5:$("#softwarelist").val(), title:elt.attr('title')},
success: function(data){
if(data.code == 1){
data: {
md5: $("#softwarelist").val(),
title: elt.attr('title')
},
success: function (data) {
var i;
if (data.code === 1) {
$("#softwarelist").empty();
for(var i=0; i<data.result.length; i++){
$("#softwarelist").append('<option value="' + data.result[i]['md5'] +
'" title="' + data.result[i]['title'] +'" rel="' +
data.result[i]['path'] +'">' + data.result[i]['title'] + '</option>');
for (i = 0; i < data.result.length; i += 1) {
$("#softwarelist").append('<option value="' + data.result[i].md5 +
'" title="' + data.result[i].title + '" rel="' +
data.result[i].path + '">' + data.result[i].title + '</option>');
}
if(data.result.length < 1){
if (data.result.length < 1) {
$("#softwarelist").append('<option>No Software Release found</option>');
$('#fileTree').empty();
}
fillContent();
$("#error").Popup("Operation complete, Selected Software Release has been delete!", {type:'confirm', duration:5000});
}
else{
$("#error").Popup(data.result, {type:'error'});
$("#error").Popup("Operation complete, Selected Software Release has been delete!",
{type: 'confirm', duration: 5000});
} else {
$("#error").Popup(data.result, {type: 'error'});
}
send = false;
}
......@@ -72,7 +85,7 @@ $(document).ready( function() {
return false;
});
function setupEditor(){
function setupEditor() {
editor = ace.edit("editor");
editor.setTheme("ace/theme/crimson_editor");
......
$(document).ready( function() {
/*jslint undef: true */
/*global $, document, window, $SCRIPT_ROOT */
/* vim: set et sts=4: */
$(document).ready(function () {
"use strict";
var send = false;
//change background
$("body").css("background", "#9C9C9C");
$("#login").click(function(){
if (send) return false;
if($("input#clogin").val() === "" || !$("input#clogin").val().match(/^[\w\d\.-]+$/)){
$("#error").Popup("Please enter a valid user name", {type:'alert', duration:3000});
$("#login").click(function () {
if (send) {
return false;
}
if($("input#cpwd").val() === "" || $("input#cpwd").val() ==="******"){
$("#error").Popup("Please enter your password", {type:'alert', duration:3000});
if ($("input#clogin").val() === "" || !$("input#clogin").val().match(/^[\w\d\.\-]+$/)) {
$("#error").Popup("Please enter a valid user name", {type: 'alert', duration: 3000});
return false;
}
if ($("input#cpwd").val() === "" || $("input#cpwd").val() === "******") {
$("#error").Popup("Please enter your password", {type: 'alert', duration: 3000});
return false;
}
send = true;
var param = {clogin:$("input#clogin").val(), cpwd:$("input#cpwd").val()};
var url = $SCRIPT_ROOT + "/doLogin";
var param = { clogin: $("input#clogin").val(), cpwd: $("input#cpwd").val() },
url = $SCRIPT_ROOT + "/doLogin";
$("#login").removeClass("button").addClass("dsblebutton");
$.post(url, param, function(data) {
if (data.code==1){
location.href = $SCRIPT_ROOT + '/';
}
else{
$("#error").Popup(data.result, {type:'alert', duration:3000});
$.post(url, param, function (data) {
if (data.code === 1) {
window.location.href = $SCRIPT_ROOT + '/';
} else {
$("#error").Popup(data.result, {type: 'alert', duration: 3000});
}
})
.error(function() {
.error(function () {
$("#error").Popup("Cannot send your account identifier please try again!!",
{type:'alert', duration:3000});})
.complete(function() {
{type: 'alert', duration: 3000});
})
.complete(function () {
$("#login").removeClass('dsblebutton').addClass('button');
send = false;
});
......
This diff is collapsed.
$(document).ready( function() {
var method = $("input#method").val();
var workdir = $("input#workdir").val();
if (method != "file"){
script = "/openFolder";
$('#fileTree').fileTree({ root: workdir, script: $SCRIPT_ROOT + script, folderEvent: 'click', expandSpeed: 750, collapseSpeed: 750, multiFolder: false, selectFolder: true }, function(file) {
/*jslint undef: true */
/*global $, document, window, $SCRIPT_ROOT */
/* vim: set et sts=4: */
$(document).ready(function () {
"use strict";
var method = $("input#method").val(),
workdir = $("input#workdir").val();
function checkFolder(path) {
$.ajax({
type: "POST",
url: $SCRIPT_ROOT + '/checkFolder',
data: "path=" + path,
success: function (data) {
var path = data.result;
$("input#path").val(path);
if (path !== "") {
$("#check").fadeIn('normal');
} else {
$("#check").hide();
}
}
});
return "";
}
function selectFile(file) {
$("#info").empty();
$("input#subfolder").val(file);
if (method === "open") {
$("#info").append("Selection: " + file);
checkFolder(file);
} else {
if ($("input#software").val() !== "" && $("input#software").val().match(/^[\w\d._\-]+$/)) {
$("#info").append("New Software in: " + file + $("input#software").val());
} else {
$("#info").append("Selection: " + file);
}
}
return;
}
if (method !== "file") {
$('#fileTree').fileTree({root: workdir, script: $SCRIPT_ROOT + '/openFolder', folderEvent: 'click', expandSpeed: 750, collapseSpeed: 750, multiFolder: false, selectFolder: true }, function (file) {
selectFile(file);
});
}
$("input#subfolder").val("");
$("#create").click(function(){
repo_url = $("input#software").val();
if($("input#software").val() == "" || !$("input#software").val().match(/^[\w\d._-]+$/)){
$("#error").Popup("Invalid Software name", {type:'alert', duration:3000})
$("#create").click(function () {
if ($("input#software").val() === "" || !$("input#software").val().match(/^[\w\d._\-]+$/)) {
$("#error").Popup("Invalid Software name", {type: 'alert', duration: 3000});
return false;
}
if($("input#subfolder").val() == ""){
$("#error").Popup("Select the parent folder of your software!", {type:'alert', duration:3000})
if ($("input#subfolder").val() === "") {
$("#error").Popup("Select the parent folder of your software!", {type: 'alert', duration: 3000});
return false;
}
$.ajax({
type: "POST",
url: $SCRIPT_ROOT + '/createSoftware',
data: "folder=" + $("input#subfolder").val() + $("input#software").val(),
success: function(data){
if(data.code == 1){
location.href = $SCRIPT_ROOT + '/editSoftwareProfile'
}
else{
$("#error").Popup(data.result, {type:'error', duration:5000})
success: function (data) {
if (data.code === 1) {
window.location.href = $SCRIPT_ROOT + '/editSoftwareProfile';
} else {
$("#error").Popup(data.result, {type: 'error', duration: 5000});
}
}
});
return false;
});
$("#open").click(function(){
$("#open").click(function () {
$("#flash").fadeOut('normal');
$("#flash").empty();
$("#flash").fadeIn('normal');
if($("input#path").val() == ""){
$("#error").Popup("Select a valid Software Release folder!", {type:'alert', duration:3000})
if ($("input#path").val() === "") {
$("#error").Popup("Select a valid Software Release folder!", {type: 'alert', duration: 3000});
return false;
}
$.ajax({
type: "POST",
url: $SCRIPT_ROOT + '/setCurrentProject',
data: "path=" + $("input#path").val(),
success: function(data){
if(data.code == 1){
location.href = $SCRIPT_ROOT + '/editSoftwareProfile'
}
else{
$("#error").Popup(data.result, {type:'error', duration:5000})
success: function (data) {
if (data.code === 1) {
window.location.href = $SCRIPT_ROOT + '/editSoftwareProfile';
} else {
$("#error").Popup(data.result, {type: 'error', duration: 5000});
}
}
});
return false;
});
function selectFile(file){
$("#info").empty();
$("input#subfolder").val(file);
path = "";
if(method == "open"){
$("#info").append("Selection: " + file);
checkFolder(file);
}
else{
if($("input#software").val() != "" && $("input#software").val().match(/^[\w\d._-]+$/)){
$("#info").append("New Software in: " + file + $("input#software").val());
}
else{
$("#info").append("Selection: " + file);
}
}
return;
}
function checkFolder(path){
$.ajax({
type: "POST",
url: $SCRIPT_ROOT + '/checkFolder',
data: "path=" + path,
success: function(data){
var path = data.result;
$("input#path").val(path);
if (path != ""){
$("#check").fadeIn('normal');
}
else{
$("#check").hide();
}
}
});
return "";
}
});
$(document).ready( function() {
var send = false;
var getStatus;
/*jslint undef: true */
/*global $, document, $SCRIPT_ROOT */
/* vim: set et sts=4: */
$(document).ready(function () {
"use strict";
var send = false,
getStatus;
function loadBranch(branch) {
var i, selected;
$("#activebranch").empty();
for (i = 0; i < branch.length; i += 1) {
selected = (branch[i].indexOf('*') === 0) ? "selected" : "";
$("#activebranch").append("<option value='" + branch[i] +
"' " + selected + ">" + branch[i] + "</option>");
}
}
function gitStatus() {
var project = $("#project").val(),
urldata = $("input#workdir").val() + "/" + project;
$("#status").empty();
$("#push").hide();
$("#flash").empty();
if (project === "") {
$("#status").append("<h2>Please select one project...</h2><br/><br/>");
$("#branchlist").hide();
return;
}
send = true;
getStatus = $.ajax({
type: "POST",
url: $SCRIPT_ROOT + '/getProjectStatus',
data: "project=" + urldata,
success: function (data) {
var message;
if (data.code === 1) {
$("#branchlist").show();
$("#status").append("<h2>Your Repository status</h2>");
message = data.result.split('\n').join('<br/>');
//alert(message);
$("#status").append("<p>" + message + "</p>");
if (data.dirty) {
$("#push").show();
$("#status").append("<br/><h2>Display Diff for current Project</h2>");
$("#status").append("<p style='font-size:15px;'>You have changes in your project." +
" <a href='" + $SCRIPT_ROOT + "/getProjectDiff/"
+ encodeURI(project) + "'>Watch the diff</a></p>");
}
loadBranch(data.branch);
} else {
$("#error").Popup(data.result, {type: 'error', duration: 5000});
}
send = false;
}
});
}
function checkout(mode) {
if ($("input#branchname").val() === "" ||
$("input#branchname").val() === "Enter the branch name...") {
$("#error").Popup("Please Enter the branch name", {type: 'alert', duration: 3000});
return false;
}
var project = $("#project").val(),
branch = $("input#branchname").val();
$.ajax({
type: "POST",
url: $SCRIPT_ROOT + '/newBranch',
data: {project: $("input#workdir").val() + "/" + project, name: branch, create: mode},
success: function (data) {
if (data.code === 1) {
$("input#branchname").val("Enter the branch name...");
gitStatus();
$("#project").change(function(){
if (send){
} else {
$("#error").Popup(data.result, {type: 'error'});
}
}
});
return false;
}
gitStatus();
$("#project").change(function () {
if (send) {
getStatus.abort();
send=false;
send = false;
}
gitStatus();
});
$("#activebranch").change(function(){
var branch = $("#activebranch").val();
var project = $("#project").val();
$("#activebranch").change(function () {
var branch = $("#activebranch").val(),
project = $("#project").val();
$.ajax({
type: "POST",
url: $SCRIPT_ROOT + '/changeBranch',
data: "project=" + $("input#workdir").val() + "/" + project + "&name=" + branch,
success: function(data){
if(data.code == 1){
success: function (data) {
if (data.code === 1) {
gitStatus();
}
else{
$("#error").Popup(data.result, {type:'error', duration:5000});
} else {
$("#error").Popup(data.result, {type: 'error', duration: 5000});
}
}
});
});
$("#addbranch").click(function(){
$("#addbranch").click(function () {
checkout("1");
return false;
});
$("#docheckout").click(function(){
$("#docheckout").click(function () {
checkout("0");
return false;
});
$("#commit").click(function(){
if($("input#commitmsg").val() == "" ||
$("input#commitmsg").val() == "Enter message..."){
$("#error").Popup("Please Enter the commit message", {type:'alert', duration:3000});
$("#commit").click(function () {
if ($("input#commitmsg").val() === "" ||
$("input#commitmsg").val() === "Enter message...") {
$("#error").Popup("Please Enter the commit message", {type: 'alert', duration: 3000});
return false;
}
if (send){
if (send) {
return false;
}
send = true;
......@@ -52,19 +137,18 @@ $(document).ready( function() {
type: "POST",
url: $SCRIPT_ROOT + '/pushProjectFiles',
data: {project: $("input#workdir").val() + "/" + project, msg: $("input#commitmsg").val()},
success: function(data){
if(data.code == 1){
if (data.result != ""){
$("#error").Popup(data.result, {type:'error', duration:5000});
success: function (data) {
if (data.code === 1) {
if (data.result !== "") {
$("#error").Popup(data.result, {type: 'error', duration: 5000});
} else {
$("#error").Popup("Commit done!", {type: 'confirm', duration: 3000});
}
else
$("#error").Popup("Commit done!", {type:'confirm', duration:3000});
gitStatus();
} else {
$("#error").Popup(data.result, {type: 'error'});
}
else{
$("#error").Popup(data.result, {type:'error'});
}
$("#imgwaitting").hide()
$("#imgwaitting").hide();
$("#commit").empty();
$("#commit").attr("value", "Commit");
send = false;
......@@ -72,8 +156,9 @@ $(document).ready( function() {
});
return false;
});
/*
$("#pullbranch").click(function(){
$("#pullbranch").click(function (){
if (send){
return false;
}
......@@ -86,16 +171,15 @@ $(document).ready( function() {
type: "POST",
url: $SCRIPT_ROOT + '/pullProjectFiles',
data: "project=" + $("input#workdir").val() + "/" + project,
success: function(data){
if(data.code == 1){
success: function (data){
if (data.code == 1){
if (data.result != ""){
error(data.result);
}
else
error("Pull done!");
gitStatus();
}
else{
} else {
error(data.result);
}
$("#pullimgwaitting").hide()
......@@ -106,75 +190,5 @@ $(document).ready( function() {
});
return false;
});*/
function gitStatus(){
var project = $("#project").val();
$("#status").empty();
$("#push").hide();
$("#flash").empty();
if (project == ""){
$("#status").append("<h2>Please select one project...</h2><br/><br/>");
$("#branchlist").hide();
return;
}
send = true;
var urldata = $("input#workdir").val() + "/" + project;
getStatus = $.ajax({
type: "POST",
url: $SCRIPT_ROOT + '/getProjectStatus',
data: "project=" + urldata,
success: function(data){
if(data.code == 1){
$("#branchlist").show();
$("#status").append("<h2>Your Repository status</h2>");
message = data.result.split('\n').join('<br/>');
//alert(message);
$("#status").append("<p>" + message + "</p>");
if(data.dirty){
$("#push").show();
$("#status").append("<br/><h2>Display Diff for current Project</h2>");
$("#status").append("<p style='font-size:15px;'>You have changes in your project." +
" <a href='" + $SCRIPT_ROOT + "/getProjectDiff/"
+ encodeURI(project) + "'>Watch the diff</a></p>");
}
loadBranch(data.branch);
}
else{
$("#error").Popup(data.result, {type:'error', duration:5000});
}
send = false;
}
});
}
function checkout(mode){
if($("input#branchname").val() == "" ||
$("input#branchname").val() == "Enter the branch name..."){
$("#error").Popup("Please Enter the branch name", {type:'alert', duration:3000});
return false;
}
var project = $("#project").val();
var branch = $("input#branchname").val();
$.ajax({
type: "POST",
url: $SCRIPT_ROOT + '/newBranch',
data: {project:$("input#workdir").val() + "/" + project, name:branch, create:mode},
success: function(data){
if(data.code == 1){
$("input#branchname").val("Enter the branch name...");
gitStatus();
}
else{
$("#error").Popup(data.result, {type:'error'});
}
}
});
return false;
}
function loadBranch(branch){
$("#activebranch").empty();
for(i=0; i< branch.length; i++){
selected = (branch[i].indexOf('*') == 0)? "selected":"";
$("#activebranch").append("<option value='" + branch[i] +
"' " + selected + ">" + branch[i] + "</option>");
}
}
});
$(document).ready( function() {
openedlogpage = $("input#type").val();
updatelogBox();
var state = getCookie("autoUpdate");
/*jslint undef: true */
/*global $, document, window, processState, getCookie, setCookie, setSpeed, $SCRIPT_ROOT */
/*global openedlogpage: true */
/* vim: set et sts=4: */
$("#logheader").click(function(){
setupBox();
});
$("#manual").change(function(){
setCookie("autoUpdate", "manual");
if ($("input#type").val() == "instance"){location.href = $SCRIPT_ROOT + "/viewInstanceLog";}
else{location.href = $SCRIPT_ROOT + "/viewSoftwareLog";}
});
$("#live").change(function(){
updatelogBox();$("#logconfigbox").find("input:radio").attr('checked', false);$("#live").attr('checked', true);
setSpeed(100);setCookie("autoUpdate", "live");openedlogpage = $("input#type").val();});
$("#slow").change(function(){
updatelogBox();$("#logconfigbox").find("input:radio").attr('checked', false);$("#slow").attr('checked', true);
setSpeed(2500);setCookie("autoUpdate", "slow");openedlogpage = $("input#type").val();});
if(state){
$("#"+state).attr('checked', true);
updatelogBox();
if (state == "manual"){
openedlogpage = ""; setSpeed(0);
}
else{setSpeed((state=="live")?100:2500);}
}
else{$("#slow").attr('checked', true);}
$(document).ready(function () {
"use strict";
function setupBox(){
function setupBox() {
var state = $("#logconfigbox").css("display");
if (state == "none"){
if (state === "none") {
$("#logconfigbox").slideDown("normal");
$("#logheader").removeClass("hide");
$("#logheader").addClass("show");
}
else{
} else {
$("#logconfigbox").slideUp("normal");
$("#logheader").removeClass("show");
$("#logheader").addClass("hide");
}
}
function updatelogBox(){
if(processState=="Stopped" || processState=="Checking" || $("#manual").is(":checked")){
function updatelogBox() {
if (processState === "Stopped" || processState === "Checking" || $("#manual").is(":checked")) {
$("#salpgridLog").hide();
$("#manualLog").show();
$("#manualLog")
.scrollTop($("#manualLog")[0].scrollHeight - $("#manualLog")
.height());
}
else{
.scrollTop($("#manualLog")[0].scrollHeight - $("#manualLog").height());
} else {
$("#salpgridLog").show();
$("#manualLog").hide();
}
}
openedlogpage = $("input#type").val();
updatelogBox();
var state = getCookie("autoUpdate");
$("#logheader").click(function () {
setupBox();
});
$("#manual").change(function () {
setCookie("autoUpdate", "manual");
if ($("input#type").val() === "instance") {
window.location.href = $SCRIPT_ROOT + "/viewInstanceLog";
} else {
window.location.href = $SCRIPT_ROOT + "/viewSoftwareLog";
}
});
$("#live").change(function () {
updatelogBox();
$("#logconfigbox").find("input:radio").attr('checked', false);
$("#live").attr('checked', true);
setSpeed(100);
setCookie("autoUpdate", "live");
openedlogpage = $("input#type").val();
});
$("#slow").change(function () {
updatelogBox();
$("#logconfigbox").find("input:radio").attr('checked', false);
$("#slow").attr('checked', true);
setSpeed(2500);
setCookie("autoUpdate", "slow");
openedlogpage = $("input#type").val();
});
if (state) {
$("#" + state).attr('checked', true);
updatelogBox();
if (state === "manual") {
openedlogpage = "";
setSpeed(0);
} else {
setSpeed((state === "live") ? 100 : 2500);
}
} else {
$("#slow").attr('checked', true);
}
});
/*jslint undef: true */
/*global $, document, window, $SCRIPT_ROOT, ace */
/* vim: set et sts=4: */
$(document).ready(function () {
"use strict";
$('#fileNavigator').gsFileManager({script: $SCRIPT_ROOT + "/fileBrowser", root:'workspace/'});
});
......@@ -36,7 +36,7 @@
</div>
<br/>
<h2>Set your Security Mode</h2>
<div class="menu-box-right" style="width: 592px;">
<div class="menu-box-right">
<div style="background:#fff; padding:10px; min-height:100px; font-size:14px;">
<div id="box0">
<h2>Clone Repository without using HTTPS and SSH</h2><br/>
......@@ -53,7 +53,7 @@
</div>
<div id="box2" style="display:none;">
<h2>Enter your username and password for https authentication access</h2><br/>
<div style="margin-left:80px; margin-bottom:20px;">
<div style="margin-left:140px; margin-bottom:20px;">
<label for='username'>Your username:&nbsp;&nbsp;</label>
<input type="text" name="username" id="username" size='20' value="Enter your username..." /><br/><br/>
<label for='password'>Your password: &nbsp;&nbsp;</label>
......@@ -63,7 +63,7 @@
</div>
</div>
</div>
<div class="menu-box-left" style="width: 115px;">
<div class="menu-box-left">
<ul id="modelist">
<li class="checked"><input type="radio" name="security" id="nothing" value="nothing" /><label for="nothing">ReadOnly</label></li>
<li><input type="radio" name="security" id="ssh" value="SSH" checked /><label for="ssh">SSH Mode</label></li>
......
......@@ -24,17 +24,15 @@
</form>
<div id="tooltip-editOption" style="display:none">
<span class="list">MD5 SUM for the current file</span>
<div style="margin-top:3px; margin-bottom:5px;border-bottom: 1px dashed #666666; heigth:1px"></div>
<a id='getmd5' href="#">Get or Update md5sum</a>
<br/><span class="list">Add Project to Develop</span><br/>
<div style="margin-top:3px;border-bottom: 1px dashed #666666; heigth:1px"></div>
<div class="sep"></div>
<span class="list">Add Project to Develop</span>
<ul id="plist">
{% for name in projectList%}
<li><input type="checkbox" name="develop" value="{{name}}" id="{{name}}">
<label>{{name}}</label></li>
{% endfor %}
</ul>
<br/>
<a href="#" id="adddevelop" class="lshare">Add to profile</a>
</div>
{% endblock %}
......
......@@ -23,6 +23,11 @@
<img src="{{ url_for('static', filename='images/manage_repo.png') }}" />
</div>
<div class="clear"></div>
<div class="umenu">
<h2><a href="{{ url_for('myAccount')}}">Your Account</a></h2>
<p>Update your account informations</p>
<img src="{{ url_for('static', filename='images/user_card.png') }}" />
</div>
<div class="lmenu smaller">
<h2><a href="{{ url_for('openProject', method='new')}}">Create your Software Release</a></h2>
<p>To create a new Software Release, choose the project directory in which you want to create your software.<!-- You will then be able to edit and
......@@ -31,11 +36,6 @@
<img src="{{ url_for('static', filename='images/folder_blue.png') }}" />
<div class="clear"></div>
</div>
<div class="umenu">
<h2><a href="{{ url_for('myAccount')}}">Your Account</a></h2>
<p>Update your account informations</p>
<img src="{{ url_for('static', filename='images/user_card.png') }}" />
</div>
<div class="clear"></div>
</div>
</div>
......
......@@ -20,7 +20,7 @@
<ul>
<li><a href="#tab1" class="active">Slapgrid Supervisor</a></li>
<li><a href="#tab2">SLAP Response</a></li>
<li><a href="#tab3" id="parameterTab">Parameters</a></li>
<li><a href="#tab3" id="parameterTab">SLAP Parameters</a></li>
<li><a href="#tab4" id="instancetabfiles">Partitions Content</a></li>
</ul><!-- //Tab buttons -->
<div class="tabDetails">
......@@ -51,7 +51,7 @@
<div id="tab2" class="tabContents">
{% if slap_status %}
<p>Uses parameters below to run your application</p>
<div class="menu-box-right" style="width: 597px;">
<div class="menu-box-right">
<div style="background:#fff; padding:10px;">
{% for item in slap_status %}
<div id="box{{item[0]}}" style="display:none;">
......@@ -62,7 +62,7 @@
</h2>
<div class="clear"></div><br/>
<div id="bcontent{{item[0]}}">
<table cellpadding="0" cellspacing="0" width="577">
<table cellpadding="0" cellspacing="0" width="100%">
<tr>
<th>Parameter Name</th><th>Parameter Value</th>
</tr>
......@@ -82,7 +82,7 @@
{% endfor %}
</div>
</div>
<div class="menu-box-left" style="width: 110px;">
<div class="menu-box-left">
<ul id="slappart">
{% for item in slap_status %}
<li><input type="radio" name="slapresponse" id="{{item[0]}}" value="{{item[0]}}" />
......@@ -143,6 +143,5 @@
</div>
</div>
{{instance}}
{% endblock %}
......@@ -13,7 +13,7 @@
<meta name="description" content="" />
<link href="{{ url_for('static', filename='css/styles.css', _external=False) }}" rel="stylesheet" type="text/css" media="screen" />
<script src="{{ url_for('static', filename='js/jquery/jquery-1.8.0.min.js') }}" type="text/javascript" charset="utf-8"></script>
<script src="{{ url_for('static', filename='js/jquery/jquery-1.8.0.js') }}" type="text/javascript" charset="utf-8"></script>
<script src="{{ url_for('static', filename='js/jquery/jquery.form.js') }}" type="text/javascript" charset="utf-8"></script>
<script src="{{ url_for('static', filename='js/jquery/popup.js') }}" type="text/javascript" charset="utf-8"></script>
<script src="{{ url_for('static', filename='js/jquery/jqueryToolTip.js') }}" type="text/javascript" charset="utf-8"></script>
......@@ -64,19 +64,17 @@
</div>
<div class="wmenu">
<ul>
<li><span class="title_software">Software</span></li>
<li><a href="{{ url_for('editSoftwareProfile') }}">Edit</a></li>
<li><a href="{{ url_for('runSoftwareProfile') }}" id="softrun">Run</a></li>
<li><a href="{{ url_for('viewSoftwareLog') }}">Build log</a></li>
<li><a href="{{ url_for('inspectSoftware') }}">Inspect</a></li>
<li><a id="removeSr" href="#">Remove all</a></li>
<li class="space"><span class="title_instance">Instance</span></li>
<li><a href="{{ url_for('editInstanceProfile') }}">Edit</a></li>
<li><a href="{{ url_for('runInstanceProfile') }}" id="instrun">Run</a></li>
<li><a href="{{ url_for('viewInstanceLog') }}">Build log</a></li>
<li><a href="{{ url_for('inspectInstance') }}">Inspect</a></li>
<li><a id="removeIst" href="#">Remove all</a></li>
<li><a href="{{ url_for('editSoftwareProfile') }}">Profiles</a></li>
<li><a href="{{ url_for('browseWorkspace') }}">Workspace</a></li>
<li class='sep'></li>
<li><a href="{{ url_for('runSoftwareProfile') }}" id="softrun">Run software</a></li>
<li><a href="{{ url_for('viewSoftwareLog') }}">Software log</a></li>
<li><a href="{{ url_for('inspectSoftware') }}">SR result</a></li>
<li class='sep'></li>
<li><a href="{{ url_for('runInstanceProfile') }}" id="instrun">Run instance</a></li>
<li><a href="{{ url_for('viewInstanceLog') }}">Instance log</a></li>
<li><a href="{{ url_for('inspectInstance') }}">Inspect instance</a></li>
<li><a id="removeIst" href="#">Destroy instance</a></li>
</ul>
</div>
<div class="clear"></div>
......@@ -123,11 +121,12 @@
<div id="tooltip-home" style="display:none">
<span style="font-weight:bold">QUICK ACCESS TO MENU</span><br/><br/>
<div style="margin-top:3px;border-bottom: 1px dashed #666666; heigth:1px"></div>
<ul>
<ul class="menu">
<li><a href="{{ url_for('manageProject')}}">Manage Repositories</a></li>
<li><a href="{{ url_for('configRepo')}}" >Clone your repository</a></li>
<li><a href="{{ url_for('openProject', method='open')}}">Open Software Release</a></li>
<li><a href="{{ url_for('openProject', method='new')}}">Create Software Release</a></li>
<li style="heigth:1px"></li>
</ul>
</div>
</body>
......
......@@ -12,9 +12,8 @@
{% endblock %}
{% block body %}
<h2>Inspect software release</h2>
<input type="hidden" name="runnerdir" id="runnerdir" value="{{softwareRoot}}" />
<label for='softwarelist'>Software Release: </label>
<label for='softwarelist' class='header'>Inspect software release </label>
<select name="softwarelist" id="softwarelist">
{%if not softwares %}<option >No Software Release found</option>{% endif %}
{%for soft in softwares %}
......
......@@ -18,51 +18,53 @@
<input type="hidden" name="workdir" id="workdir" value="{{workDir}}" />
<input type="hidden" name="subfolder" id="subfolder" value="" />
<div id="software_folder">
<h2 class="hight show" id="details_head">Current software release file content</h2>
<div class="software_details" id="details_box">
<div id="fileTree" class="file_tree_short"></div>
<div class="software_details">
<a href="#" id="switch" class="lshare no-right-border" style="float:left">Switch to Project</a>
<a href="#" id="clearselect" class="lshare no-right-border" style="float:left">Reset</a>
<a href="#" id="save" class="lshare" style="float:left">Save</a>
<div class="clear"></div>
<div id="details_box">
<div id="fileTree" class="file_tree_short" title="Double click to edit selected file..."></div>
<div id="fileTreeFull" style='display:none' class="file_tree_short" title="Double click to edit selected file..."></div>
<div class="box_software">
<h2>Add new file or folder</h2>
<input type="text" name="file" id="file" size='22' value="Enter name here..." />
&nbsp;&nbsp;&nbsp;<select name="type" id="type">
<input type="text" name="file" id="file" size='12' value="Name here..." />
&nbsp;<select name="type" id="type">
<option value="file">file</option>
<option value="folder">folder</option>
</select>
&nbsp;&nbsp;&nbsp;<input type="submit" name="add" id ="add" value="Add" class="button"/>
<br/><br/>
<a href="#" id="switch" class="lshare">Switch to Project files</a>
<a href="" id="clearselect" class="lshare">Clear selection</a><br/><br/>
<div id="file_info" class="file_info"><span id="info">Select directory or nothing for root directory...</span></div>
&nbsp;<input type="submit" name="add" id ="add" value="Add" class="button"/>
</div>
<div class="clear"></div>
</div>
<div class="clear"></div>
<div id="code" style="margin-top:10px">
<h2 class='title'><span id="edit_info">No file selected</span> <a style="display:none" id='option' href='#' rel='tooltip' title='Show more option'>[More]</a></h2>
<div class='md5sum' id='md5sum'></div>
</div>
<div id="code">
<h2 class='title'>
<a style="display:none" id='option' href='#' rel='tooltip' title='Show more option'>[Current file]</a><span id="edit_info">No file in editor</span>
<span id="edit_status"></span>
</h2>
<div class="main_content">
<pre id="editor">
</pre>
</div>
<input type=submit value="Save" id="save" class="button">
<!--<input type=submit value="Save" id="save" class="button">-->
</div>
</div>
<div class="clear"></div>
<div id="file_info" class="file_info"><span id="info"></span></div>
<br/>
</form>
<div id="tooltip-option" style="display:none">
<span class="list">MD5 SUM for the current file</span>
<div style="margin-top:3px; margin-bottom:5px;border-bottom: 1px dashed #666666; heigth:1px"></div>
<span class="list first-list">MD5 SUM for the current file</span>
<a id='getmd5' href="#">Get or Update md5sum</a>
<br/><span class="list">Add Project to Develop</span><br/>
<div style="margin-top:3px;border-bottom: 1px dashed #666666; heigth:1px"></div>
<div class="sep"></div>
<span class="list">Add Project to Develop</span>
<ul id="plist">
{% for name in projectList%}
<li><input type="checkbox" name="develop" value="{{name}}" id="{{name}}">
<label>{{name}}</label></li>
{% endfor %}
</ul>
<br/>
<a href="#" id="adddevelop" class="lshare">Add to profile</a>
</div>
{% endblock %}
......@@ -24,17 +24,15 @@
</form>
<div id="tooltip-editOption" style="display:none">
<span class="list">MD5 SUM for the current file</span>
<div style="margin-top:3px; margin-bottom:5px;border-bottom: 1px dashed #666666; heigth:1px"></div>
<a id='getmd5' href="#">Get or Update md5sum</a>
<br/><span class="list">Add Project to Develop</span><br/>
<div style="margin-top:3px;border-bottom: 1px dashed #666666; heigth:1px"></div>
<div class="sep"></div>
<span class="list">Add Project to Develop</span><br/>
<ul id="plist">
{% for name in projectList%}
<li><input type="checkbox" name="develop" value="{{name}}" id="{{name}}">
<label>{{name}}</label></li>
{% endfor %}
</ul>
<br/>
<a href="#" id="adddevelop" class="lshare">Add to profile</a>
</div>
{% endblock %}
......
......@@ -23,18 +23,17 @@
</dl>
</form>
<div id="tooltip-editOption" style="display:none">
<span class="list">MD5 SUM for the current file</span>
<div style="margin-top:3px; margin-bottom:5px;border-bottom: 1px dashed #666666; heigth:1px"></div>
<span class="list">Current profile options</span>
<a id='getmd5' href="#">Get or Update md5sum</a>
<br/><span class="list">Add Project to Develop</span><br/>
<div style="margin-top:3px;border-bottom: 1px dashed #666666; heigth:1px"></div>
<a href="{{ url_for('editCurrentProject')}}">Edit software release files</a>
<div class="sep"></div>
<span class="list">Add Project to Develop</span>
<ul id="plist">
{% for name in projectList%}
<li><input type="checkbox" name="develop" value="{{name}}" id="{{name}}">
<label>{{name}}</label></li>
{% endfor %}
</ul>
<br/>
<a href="#" id="adddevelop" class="lshare">Add to profile</a>
</div>
{% endblock %}
......
......@@ -18,6 +18,6 @@
<label for="slow">From time to time</label>
</div>
<br/>
<div class="log_content"><textarea class="log" readonly id="salpgridLog"></textarea>
<div class="log_content"><div class="log" id="salpgridLog"></div>
<textarea class="log" readonly id="manualLog" style="display:none">{{result}}</textarea></div>
{% endblock %}
{% extends "layout.html" %}
{% block title %}Browse webrunner workspace{% endblock %}
{% block head %}
{{ super() }}
<script src="{{ url_for('static', filename='js/ace/ace.js') }}" type="text/javascript" charset="utf-8"></script>
<script src="{{ url_for('static', filename='js/ace/theme-crimson_editor.js') }}" type="text/javascript" charset="utf-8"></script>
<script src="{{ url_for('static', filename='js/scripts/workspace.js') }}" type="text/javascript" charset="utf-8"></script>
<link href="{{ url_for('static', filename='css/colorbox.css', _external=False) }}" rel="stylesheet" type="text/css" media="screen" />
<script src="{{ url_for('static', filename='js/jquery/jquery.colorbox-min.js') }}" type="text/javascript" charset="utf-8"></script>
<link href="{{ url_for('static', filename='css/gsFileManager.css', _external=False) }}" rel="stylesheet" type="text/css" media="screen" />
<script src="{{ url_for('static', filename='js/jquery/gsFileManager.js') }}" type="text/javascript" charset="utf-8"></script>
{% endblock %}
{% block body %}
<div id="fileNavigator" class="browser"></div>
{% endblock %}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
......@@ -26,7 +26,7 @@ class NetworkcacheParser(OptionParser):
"""
def __init__(self, usage=None, version=None):
"""
Initialize all options possibles.
Initialize all possible options.
"""
OptionParser.__init__(self, usage=usage, version=version,
option_list=[
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment