Commit e1734e20 authored by Виталий Мурашко's avatar Виталий Мурашко

Merge branch 'master' of http://git.task-on.com/ktask/task-on.com

Conflicts:
	backend/controllers/SiteController.php
parents 36543025 e44aebc0
......@@ -32,9 +32,6 @@ class HeadAsset extends AssetBundle
'position' => \yii\web\View::POS_HEAD
];
public $depends = [
'yii\web\JqueryAsset',
'yii\jui\JuiAsset',
'yii\bootstrap\BootstrapAsset',
'yii\bootstrap\BootstrapPluginAsset',
];
}
......@@ -51,7 +51,10 @@ return [
],
'user' => [
'identityClass' => 'common\modules\users\models\User',
'enableAutoLogin' => true,
'identityCookie' => [
'name' => '_backendIdentity'
],
'enableAutoLogin' => false,
],
'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
......
......@@ -5,7 +5,7 @@ use Yii;
use yii\filters\AccessControl;
use yii\web\Controller;
use common\models\LoginForm;
use yii\filters\VerbFilter;
use common\modules\users\models\User;
/**
* Site controller
......@@ -34,12 +34,6 @@ class SiteController extends Controller
],
],
],
/*'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'logout' => ['post'],
],
],*/
];
}
......@@ -66,8 +60,17 @@ class SiteController extends Controller
$this->layout = "blank";
$model = new LoginForm();
if ($model->load(Yii::$app->request->post()) && $model->login())
if ($model->load(Yii::$app->request->post()) && $model->validate())
{
if($model->user->role == User::ROLE_ADMIN)
{
$model->login();
}
else
{
return $this->refresh();
}
return $this->goBack();
}
else
......
......@@ -29,7 +29,7 @@ AppAsset::register($this);
$this->registerCssFile('/plugins/font-awesome/css/font-awesome.min.css', ['position' => \yii\web\View::POS_HEAD]);
$this->registerCssFile('/css/animate.min.css', ['position' => \yii\web\View::POS_HEAD]);
$this->registerCssFile('/css/style.min.css', ['position' => \yii\web\View::POS_HEAD]);
$this->registerCssFile('/css/simple_line_icons.css', ['position' => \yii\web\View::POS_HEAD]);
// $this->registerCssFile('/css/simple_line_icons.css', ['position' => \yii\web\View::POS_HEAD]);
$this->registerCssFile('/css/style-responsive.min.css', ['position' => \yii\web\View::POS_HEAD]);
$this->registerCssFile('/css/theme/default.css', ['position' => \yii\web\View::POS_HEAD]);
?>
......@@ -67,12 +67,7 @@ AppAsset::register($this);
$this->registerJsFile('/plugins/slimscroll/jquery.slimscroll.min.js', ['position' => \yii\web\View::POS_END ]);
$this->registerJsFile('/plugins/jquery-cookie/jquery.cookie.js', ['position' => \yii\web\View::POS_END ]);
?>
<?php
$script = <<<JS
JS;
$this->registerJs($script, \yii\web\View::POS_READY);
?>
</body>
</html>
<?php $this->endPage() ?>
......@@ -22,7 +22,7 @@ use frontend\widgets\Alert;
<li><a href="javascript:;">Calendar</a></li-->
<li><a href="javascript:;">Настройки</a></li>
<li class="divider"></li>
<li><a data-method="post" href="/site/logout">Выход</a></li>
<li><a href="/site/logout">Выход</a></li>
</ul>
</li>
<?php endif?>
......
......@@ -62,41 +62,26 @@ abstract class BaseController extends Controller
public function beforeAction($action)
{
CheckPresenceTime::init()->initScript();
/*if(substr($currentUrl, -1) == '/' && $currentUrl!="/") {
$urlWithoutSlash = substr($currentUrl, 0, -1);
return $this->redirect($urlWithoutSlash,true,301);
}*/
$actions = ['/login', '/changePasswordRequest', '/changePassword', '/error'];
$curr_action = lcfirst($action->id);
// $actions = ['/login', '/changePasswordRequest', '/changePassword', '/error'];
$feedback_action = $action->controller->id == 'feedback' && $curr_action == 'create';
// $curr_action = lcfirst($action->id);
$testing_controller = $action->controller->id == 'testingTest';
// $feedback_action = $action->controller->id == 'feedback' && $curr_action == 'create';
// $testing_controller = $action->controller->id == 'testingTest';
if (!empty(Yii::$app->request->cookies['startPage']->value)) {
Yii::$app->response->cookies->add(new \yii\web\Cookie([
'name' => 'startPage',
'value' => "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"
]));
}
if (Yii::$app->user->isGuest && !in_array($curr_action, $actions) && !$feedback_action && !$testing_controller)
{
//$this->redirect($this->url('/users/user/login'));
}
/*$item_name = common\modules\rbac\models\AuthItem::constructName(Yii::$app->controller->id, $action->id);
if (isset(Yii::$app->params->save_site_actions) && Yii::$app->params->save_site_actions)
{
common\modules\main\MainModule::saveSiteAction();
}*/
// if (!empty(Yii::$app->request->cookies['startPage']->value)) {
// Yii::$app->response->cookies->add(new \yii\web\Cookie([
// 'name' => 'startPage',
// 'value' => "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"
// ]));
// }
$this->setTitle($action);
$this->_setMetaTags($action);
......
......@@ -113,6 +113,7 @@ class UnisenderAPI {
'campaign_id' => $campaign_id
]
);
$result = Json::decode($result);
if (array_key_exists('result', $result) && array_key_exists('letter_id', $result['result']) && $result['result']['letter_id']==$message_id) {
foreach($result['result']['data'] as $data) {
$this->statuses[] = $data[1];
......
......@@ -5,13 +5,20 @@ return [
'cache' => [
'class' => 'yii\caching\FileCache',
],
'db' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=framework',
'username' => 'framework',
'password' => 'T57Rrf9mfEfme7ys',
'charset' => 'utf8',
],
'dbSupport' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=185.106.106.36;dbname=art_redmine',
'username' => 'russia',
'password' => 'rdJz4fDZ',
'charset' => 'utf8',
],
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'viewPath' => '@common/mail',
......
......@@ -14,7 +14,7 @@ class LoginForm extends Model
public $password;
public $rememberMe = true;
private $_user = false;
private $_user = null;
/**
......@@ -32,7 +32,6 @@ class LoginForm extends Model
['phone','safe'],
// password is validated by validatePassword()
['password', 'validatePassword'],
['username', 'validateStatus'],
];
}
......@@ -52,23 +51,6 @@ class LoginForm extends Model
}
}
}
/**
* Validates the status.
* This method serves as the inline validation for status.
*
* @param string $attribute the attribute currently being validated
* @param array $params the additional name-value pairs given in the rule
*/
public function validateStatus($attribute, $params)
{
if (!$this->hasErrors()) {
$user = $this->getUser();
/*if ($user->status != User::STATUS_ACTIVE) {
$this->addError($attribute, 'Пожалуйста, активируйте свой аккаунт.');
}*/
}
}
/**
* Logs in a user using the provided username and password.
......@@ -77,22 +59,9 @@ class LoginForm extends Model
*/
public function login()
{
if ($this->validate())
{
$user = $this->getUser();
if(Yii::$app->id == 'app-backend' && $user->role != User::ROLE_ADMIN)
{
return false;
}
else
{
return Yii::$app->user->login($user, $this->rememberMe ? 3600 * 24 * 30 : 0);
}
}
else
{
return false;
}
$user = $this->getUser();
return Yii::$app->user->login($user, $this->rememberMe ? 3600 * 24 * 30 : 0);
}
/**
......@@ -102,7 +71,7 @@ class LoginForm extends Model
*/
public function getUser()
{
if ($this->_user === false)
if ($this->_user === null)
{
$this->_user = User::findByUsername($this->username);
}
......
<?php
namespace common\modules\support;
/**
* support module definition class
*/
class Module extends \common\components\WebModule
{
/**
* @inheritdoc
*/
public $controllerNamespace = 'common\modules\support\controllers';
public static $active = true;
public $menu_icons = 'fa fa-support';
/**
* @inheritdoc
*/
public function init()
{
parent::init();
}
public static function name()
{
return 'Техническая поддержка';
}
public static function description()
{
return 'Техническая поддержка';
}
public static function version()
{
return '1.0';
}
public static function adminMenu()
{
return array(
);
}
}
<?php
namespace common\modules\support\controllers;
use Yii;
use yii\filters\AccessControl;
use yii\web\Controller;
use common\modules\support\models\LoginForm;
use common\modules\users\models\User;
/**
* Default controller for the `support` module
*/
class DefaultController extends Controller
{
public $meta_title;
public $meta_description;
public $meta_keywords;
public $page_title;
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'user' => 'support',
'only' => ['login', 'logout'],
'rules' => [
[
'allow' => true,
'actions' => ['login'],
'roles' => ['?'],
],
[
'allow' => true,
'actions' => ['logout'],
'roles' => ['@'],
],
],
],
];
}
public static function actionsTitles()
{
return [
'Login' => 'Авторизация',
'Logout' => 'Выход',
];
}
public function actionLogin()
{
$this->page_title = 'Техническая поддержка';
$this->layout = "@backend/views/layouts/blank";
$model = new LoginForm();
if ($model->load(Yii::$app->request->post()) && $model->validate())
{
if($model->user->role == User::ROLE_SUPPORT)
{
$model->login();
return $this->redirect(['/support']);
}
else
{
$model->addError('password', 'Доступ запрещен!');
}
}
return $this->render('@backend/views/site/login', [
'model' => $model,
]);
}
public function actionLogout()
{
Yii::$app->support->logout();
return $this->redirect(['/support']);
}
}
<?php
namespace common\modules\support\controllers;
use Yii;
use yii\filters\AccessControl;
use yii\web\Controller;
use common\modules\support\models\redmine\Issue;
use common\modules\support\models\redmine\IssueSearch;
/**
* Default controller for the `support` module
*/
class SupportController extends Controller
{
public $meta_title;
public $meta_description;
public $meta_keywords;
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'user' => 'support',
'only' => ['index'],
'rules' => [
[
'allow' => true,
'actions' => ['index'],
'roles' => ['@'],
],
],
],
];
}
public static function actionsTitles()
{
return [
'Index' => 'Техническая поддержка',
];
}
public function actionIndex()
{
$searchModel = new IssueSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
public function actionCreate()
{
$model = new Issue();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('create', [
'model' => $model,
]);
}
}
}
<?php
namespace common\modules\support\models;
use Yii;
/**
* Login form
*/
class LoginForm extends \common\models\LoginForm
{
/**
* Logs in a user using the provided username and password.
*
* @return boolean whether the user is logged in successfully
*/
public function login()
{
$user = $this->getUser();
return Yii::$app->support->login($user, $this->rememberMe ? 3600 * 24 * 30 : 0);
}
}
<?php
namespace common\modules\support\models\redmine;
use Yii;
/**
* This is the model class for table "issues".
*
* @property integer $id
* @property integer $tracker_id
* @property integer $project_id
* @property string $subject
* @property string $description
* @property string $due_date
* @property integer $category_id
* @property integer $status_id
* @property integer $assigned_to_id
* @property integer $priority_id
* @property integer $fixed_version_id
* @property integer $author_id
* @property integer $lock_version
* @property string $created_on
* @property string $updated_on
* @property string $start_date
* @property integer $done_ratio
* @property double $estimated_hours
* @property integer $parent_id
* @property integer $root_id
* @property integer $lft
* @property integer $rgt
* @property integer $is_private
* @property string $closed_on
* @property integer $assigned_to_manager_id
* @property integer $assigned_to_customer_id
* @property double $price_for_customer
* @property double $max_price_for_developer
* @property double $price_developer
* @property string $type_price
* @property integer $paid
*/
class Issue extends \common\components\ActiveRecordModel
{
/**
* @inheritdoc
*/
public function name()
{
return 'Задача Redmine';
}
/**
* @inheritdoc
*/
public static function tableName()
{
return 'issues';
}
/**
* @return \yii\db\Connection the database connection used by this AR class.
*/
public static function getDb()
{
return Yii::$app->get('dbSupport');
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['tracker_id', 'project_id', 'status_id', 'priority_id', 'author_id'], 'required'],
[['tracker_id', 'project_id', 'category_id', 'status_id', 'assigned_to_id', 'priority_id', 'fixed_version_id', 'author_id', 'lock_version', 'done_ratio', 'parent_id', 'root_id', 'lft', 'rgt', 'is_private', 'assigned_to_manager_id', 'assigned_to_customer_id', 'paid'], 'integer'],
[['description'], 'string'],
[['due_date', 'created_on', 'updated_on', 'start_date', 'closed_on'], 'safe'],
[['estimated_hours', 'price_for_customer', 'max_price_for_developer', 'price_developer'], 'number'],
[['subject', 'type_price'], 'string', 'max' => 255],
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id' => 'ID',
'tracker_id' => 'Tracker ID',
'project_id' => 'Project ID',
'subject' => 'Subject',
'description' => 'Description',
'due_date' => 'Due Date',
'category_id' => 'Category ID',
'status_id' => 'Status ID',
'assigned_to_id' => 'Assigned To ID',
'priority_id' => 'Priority ID',
'fixed_version_id' => 'Fixed Version ID',
'author_id' => 'Author ID',
'lock_version' => 'Lock Version',
'created_on' => 'Created On',
'updated_on' => 'Updated On',
'start_date' => 'Start Date',
'done_ratio' => 'Done Ratio',
'estimated_hours' => 'Estimated Hours',
'parent_id' => 'Parent ID',
'root_id' => 'Root ID',
'lft' => 'Lft',
'rgt' => 'Rgt',
'is_private' => 'Is Private',
'closed_on' => 'Closed On',
'assigned_to_manager_id' => 'Assigned To Manager ID',
'assigned_to_customer_id' => 'Assigned To Customer ID',
'price_for_customer' => 'Price For Customer',
'max_price_for_developer' => 'Max Price For Developer',
'price_developer' => 'Price Developer',
'type_price' => 'Type Price',
'paid' => 'Paid',
];
}
}
<?php
namespace common\modules\support\models\redmine;
use Yii;
use yii\base\Model;
use yii\data\ActiveDataProvider;
use common\modules\support\models\redmine\Issue;
/**
* IssueSearch represents the model behind the search form about `common\modules\support\models\redmine\Issue`.
*/
class IssueSearch extends Issue
{
/**
* @inheritdoc
*/
public function rules()
{
return [
[['id', 'tracker_id', 'project_id', 'category_id', 'status_id', 'assigned_to_id', 'priority_id', 'fixed_version_id', 'author_id', 'lock_version', 'done_ratio', 'parent_id', 'root_id', 'lft', 'rgt', 'is_private', 'assigned_to_manager_id', 'assigned_to_customer_id', 'paid'], 'integer'],
[['subject', 'description', 'due_date', 'created_on', 'updated_on', 'start_date', 'closed_on', 'type_price'], 'safe'],
[['estimated_hours', 'price_for_customer', 'max_price_for_developer', 'price_developer'], 'number'],
];
}
/**
* @inheritdoc
*/
public function scenarios()
{
// bypass scenarios() implementation in the parent class
return Model::scenarios();
}
/**
* Creates data provider instance with search query applied
*
* @param array $params
*
* @return ActiveDataProvider
*/
public function search($params)
{
$query = Issue::find();
// add conditions that should always apply here
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$this->load($params);
if (!$this->validate()) {
// uncomment the following line if you do not want to return any records when validation fails
// $query->where('0=1');
return $dataProvider;
}
$query->andWhere(['author_id' => Yii::$app->support->identity->support_id]);
// grid filtering conditions
$query->andFilterWhere([
'id' => $this->id,
'tracker_id' => $this->tracker_id,
'project_id' => $this->project_id,
'due_date' => $this->due_date,
'category_id' => $this->category_id,
'status_id' => $this->status_id,
'assigned_to_id' => $this->assigned_to_id,
'priority_id' => $this->priority_id,
'fixed_version_id' => $this->fixed_version_id,
'author_id' => $this->author_id,
'lock_version' => $this->lock_version,
'created_on' => $this->created_on,
'updated_on' => $this->updated_on,
'start_date' => $this->start_date,
'done_ratio' => $this->done_ratio,
'estimated_hours' => $this->estimated_hours,
'parent_id' => $this->parent_id,
'root_id' => $this->root_id,
'lft' => $this->lft,
'rgt' => $this->rgt,
'is_private' => $this->is_private,
'closed_on' => $this->closed_on,
'assigned_to_manager_id' => $this->assigned_to_manager_id,
'assigned_to_customer_id' => $this->assigned_to_customer_id,
'price_for_customer' => $this->price_for_customer,
'max_price_for_developer' => $this->max_price_for_developer,
'price_developer' => $this->price_developer,
'paid' => $this->paid,
]);
$query->andFilterWhere(['like', 'subject', $this->subject])
->andFilterWhere(['like', 'description', $this->description])
->andFilterWhere(['like', 'type_price', $this->type_price]);
return $dataProvider;
}
}
<?php
namespace common\modules\support\models\redmine;
use Yii;
/**
* This is the model class for table "issue_statuses".
*
* @property integer $id
* @property string $name
* @property integer $is_closed
* @property integer $position
* @property integer $default_done_ratio
* @property string $status_custumer_name
* @property integer $status_custumer_edit
* @property integer $send_mesage_to_customer
* @property integer $send_mesage_to_manager
* @property integer $send_mesage_to_developer
* @property integer $closed_manager
* @property integer $closed_developer
* @property string $status_developer_name
* @property integer $watch_by_developer
* @property integer $watch_by_manager
* @property integer $watch_by_customer
* @property integer $status
*/
class IssueStatus extends \common\components\ActiveRecordModel
{
/**
* @inheritdoc
*/
public function name()
{
return 'Статус задач Redmine';
}
/**
* @inheritdoc
*/
public static function tableName()
{
return 'issue_statuses';
}
/**
* @return \yii\db\Connection the database connection used by this AR class.
*/
public static function getDb()
{
return Yii::$app->get('dbSupport');
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['is_closed', 'position', 'default_done_ratio', 'status_custumer_edit', 'send_mesage_to_customer', 'send_mesage_to_manager', 'send_mesage_to_developer', 'closed_manager', 'closed_developer', 'watch_by_developer', 'watch_by_manager', 'watch_by_customer', 'status'], 'integer'],
[['name'], 'string', 'max' => 30],
[['status_custumer_name', 'status_developer_name'], 'string', 'max' => 255],
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id' => 'ID',
'name' => 'Name',
'is_closed' => 'Is Closed',
'position' => 'Position',
'default_done_ratio' => 'Default Done Ratio',
'status_custumer_name' => 'Status Custumer Name',
'status_custumer_edit' => 'Status Custumer Edit',
'send_mesage_to_customer' => 'Send Mesage To Customer',
'send_mesage_to_manager' => 'Send Mesage To Manager',
'send_mesage_to_developer' => 'Send Mesage To Developer',
'closed_manager' => 'Closed Manager',
'closed_developer' => 'Closed Developer',
'status_developer_name' => 'Status Developer Name',
'watch_by_developer' => 'Watch By Developer',
'watch_by_manager' => 'Watch By Manager',
'watch_by_customer' => 'Watch By Customer',
'status' => 'Status',
];
}
}
<?php
namespace common\modules\support\models\redmine;
use Yii;
/**
* This is the model class for table "users".
*
* @property integer $id
* @property string $login
* @property string $hashed_password
* @property string $firstname
* @property string $lastname
* @property integer $admin
* @property integer $status
* @property string $last_login_on
* @property string $language
* @property integer $auth_source_id
* @property string $created_on
* @property string $updated_on
* @property string $type
* @property string $identity_url
* @property string $mail_notification
* @property string $salt
* @property integer $must_change_passwd
* @property string $passwd_changed_on
* @property integer $show_report
* @property string $requisite
*/
class User extends \common\components\ActiveRecordModel
{
const TYPE_USER = 'User';
const TYPE_GROUP = 'Group';
const TYPE_GROUP_NON_MEMBER = 'GroupNonMember';
const TYPE_GROUP_ANONYMOUS = 'GroupAnonymous';
const TYPE_ANONYMOUS_USER = 'AnonymousUser';
public $specialName;
/**
* @inheritdoc
*/
public function name()
{
return 'Пользователи Redmine';
}
/**
* @inheritdoc
*/
public static function tableName()
{
return 'users';
}
/**
* @return \yii\db\Connection the database connection used by this AR class.
*/
public static function getDb()
{
return Yii::$app->get('dbSupport');
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['admin', 'status', 'auth_source_id', 'must_change_passwd', 'show_report'], 'integer'],
[['last_login_on', 'created_on', 'updated_on', 'passwd_changed_on', 'specialName'], 'safe'],
[['requisite'], 'string'],
[['login', 'lastname', 'type', 'identity_url', 'mail_notification'], 'string', 'max' => 255],
[['hashed_password'], 'string', 'max' => 40],
[['firstname'], 'string', 'max' => 30],
[['language'], 'string', 'max' => 5],
[['salt'], 'string', 'max' => 64],
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id' => 'ID',
'login' => 'Логин',
'hashed_password' => 'Пароль',
'firstname' => 'Имя',
'lastname' => 'Фамилия',
'admin' => 'Admin',
'status' => 'Статус',
'last_login_on' => 'Последняя авторизация',
'language' => 'Язык',
'auth_source_id' => 'Auth Source ID',
'created_on' => 'Created On',
'updated_on' => 'Updated On',
'type' => 'Тип',
'identity_url' => 'Identity Url',
'mail_notification' => 'Mail Notification',
'salt' => 'Salt',
'must_change_passwd' => 'Must Change Passwd',
'passwd_changed_on' => 'Passwd Changed On',
'show_report' => 'Show Report',
'requisite' => 'Requisite',
];
}
}
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
/* @var $this yii\web\View */
/* @var $model common\modules\support\models\redmine\Issue */
/* @var $form yii\widgets\ActiveForm */
?>
<div class="issue-form">
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'tracker_id')->textInput() ?>
<?= $form->field($model, 'project_id')->textInput() ?>
<?= $form->field($model, 'subject')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'description')->textarea(['rows' => 6]) ?>
<?= $form->field($model, 'due_date')->textInput() ?>
<?= $form->field($model, 'category_id')->textInput() ?>
<?= $form->field($model, 'status_id')->textInput() ?>
<?= $form->field($model, 'assigned_to_id')->textInput() ?>
<?= $form->field($model, 'priority_id')->textInput() ?>
<?= $form->field($model, 'fixed_version_id')->textInput() ?>
<?= $form->field($model, 'author_id')->textInput() ?>
<?= $form->field($model, 'lock_version')->textInput() ?>
<?= $form->field($model, 'created_on')->textInput() ?>
<?= $form->field($model, 'updated_on')->textInput() ?>
<?= $form->field($model, 'start_date')->textInput() ?>
<?= $form->field($model, 'done_ratio')->textInput() ?>
<?= $form->field($model, 'estimated_hours')->textInput() ?>
<?= $form->field($model, 'parent_id')->textInput() ?>
<?= $form->field($model, 'root_id')->textInput() ?>
<?= $form->field($model, 'lft')->textInput() ?>
<?= $form->field($model, 'rgt')->textInput() ?>
<?= $form->field($model, 'is_private')->textInput() ?>
<?= $form->field($model, 'closed_on')->textInput() ?>
<?= $form->field($model, 'assigned_to_manager_id')->textInput() ?>
<?= $form->field($model, 'assigned_to_customer_id')->textInput() ?>
<?= $form->field($model, 'price_for_customer')->textInput() ?>
<?= $form->field($model, 'max_price_for_developer')->textInput() ?>
<?= $form->field($model, 'price_developer')->textInput() ?>
<?= $form->field($model, 'type_price')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'paid')->textInput() ?>
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
/* @var $this yii\web\View */
/* @var $model common\modules\support\models\redmine\IssueSearch */
/* @var $form yii\widgets\ActiveForm */
?>
<div class="issue-search">
<?php $form = ActiveForm::begin([
'action' => ['index'],
'method' => 'get',
]); ?>
<?= $form->field($model, 'id') ?>
<?= $form->field($model, 'tracker_id') ?>
<?= $form->field($model, 'project_id') ?>
<?= $form->field($model, 'subject') ?>
<?= $form->field($model, 'description') ?>
<?php // echo $form->field($model, 'due_date') ?>
<?php // echo $form->field($model, 'category_id') ?>
<?php // echo $form->field($model, 'status_id') ?>
<?php // echo $form->field($model, 'assigned_to_id') ?>
<?php // echo $form->field($model, 'priority_id') ?>
<?php // echo $form->field($model, 'fixed_version_id') ?>
<?php // echo $form->field($model, 'author_id') ?>
<?php // echo $form->field($model, 'lock_version') ?>
<?php // echo $form->field($model, 'created_on') ?>
<?php // echo $form->field($model, 'updated_on') ?>
<?php // echo $form->field($model, 'start_date') ?>
<?php // echo $form->field($model, 'done_ratio') ?>
<?php // echo $form->field($model, 'estimated_hours') ?>
<?php // echo $form->field($model, 'parent_id') ?>
<?php // echo $form->field($model, 'root_id') ?>
<?php // echo $form->field($model, 'lft') ?>
<?php // echo $form->field($model, 'rgt') ?>
<?php // echo $form->field($model, 'is_private') ?>
<?php // echo $form->field($model, 'closed_on') ?>
<?php // echo $form->field($model, 'assigned_to_manager_id') ?>
<?php // echo $form->field($model, 'assigned_to_customer_id') ?>
<?php // echo $form->field($model, 'price_for_customer') ?>
<?php // echo $form->field($model, 'max_price_for_developer') ?>
<?php // echo $form->field($model, 'price_developer') ?>
<?php // echo $form->field($model, 'type_price') ?>
<?php // echo $form->field($model, 'paid') ?>
<div class="form-group">
<?= Html::submitButton('Search', ['class' => 'btn btn-primary']) ?>
<?= Html::resetButton('Reset', ['class' => 'btn btn-default']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
<?php
use yii\helpers\Html;
/* @var $this yii\web\View */
/* @var $model common\modules\support\models\redmine\Issue */
$this->title = 'Create Issue';
$this->params['breadcrumbs'][] = ['label' => 'Issues', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="issue-create">
<h1><?= Html::encode($this->title) ?></h1>
<?= $this->render('_form', [
'model' => $model,
]) ?>
</div>
<?php
use yii\helpers\Html;
use yii\grid\GridView;
/* @var $this yii\web\View */
/* @var $searchModel common\modules\support\models\redmine\IssueSearch */
/* @var $dataProvider yii\data\ActiveDataProvider */
$this->title = 'Issues';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="issue-index">
<h1><?= Html::encode($this->title) ?></h1>
<?php // echo $this->render('_search', ['model' => $searchModel]); ?>
<p>
<?= Html::a('Create Issue', ['create'], ['class' => 'btn btn-success']) ?>
</p>
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'id',
'tracker_id',
'project_id',
'subject',
'description:ntext',
// 'due_date',
// 'category_id',
// 'status_id',
// 'assigned_to_id',
// 'priority_id',
// 'fixed_version_id',
// 'author_id',
// 'lock_version',
// 'created_on',
// 'updated_on',
// 'start_date',
// 'done_ratio',
// 'estimated_hours',
// 'parent_id',
// 'root_id',
// 'lft',
// 'rgt',
// 'is_private',
// 'closed_on',
// 'assigned_to_manager_id',
// 'assigned_to_customer_id',
// 'price_for_customer',
// 'max_price_for_developer',
// 'price_developer',
// 'type_price',
// 'paid',
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
</div>
<?php
use yii\helpers\Html;
/* @var $this yii\web\View */
/* @var $model common\modules\support\models\redmine\Issue */
$this->title = 'Update Issue: ' . ' ' . $model->id;
$this->params['breadcrumbs'][] = ['label' => 'Issues', 'url' => ['index']];
$this->params['breadcrumbs'][] = ['label' => $model->id, 'url' => ['view', 'id' => $model->id]];
$this->params['breadcrumbs'][] = 'Update';
?>
<div class="issue-update">
<h1><?= Html::encode($this->title) ?></h1>
<?= $this->render('_form', [
'model' => $model,
]) ?>
</div>
<?php
use yii\helpers\Html;
use yii\widgets\DetailView;
/* @var $this yii\web\View */
/* @var $model common\modules\support\models\redmine\Issue */
$this->title = $model->id;
$this->params['breadcrumbs'][] = ['label' => 'Issues', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="issue-view">
<h1><?= Html::encode($this->title) ?></h1>
<p>
<?= Html::a('Update', ['update', 'id' => $model->id], ['class' => 'btn btn-primary']) ?>
<?= Html::a('Delete', ['delete', 'id' => $model->id], [
'class' => 'btn btn-danger',
'data' => [
'confirm' => 'Are you sure you want to delete this item?',
'method' => 'post',
],
]) ?>
</p>
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'id',
'tracker_id',
'project_id',
'subject',
'description:ntext',
'due_date',
'category_id',
'status_id',
'assigned_to_id',
'priority_id',
'fixed_version_id',
'author_id',
'lock_version',
'created_on',
'updated_on',
'start_date',
'done_ratio',
'estimated_hours',
'parent_id',
'root_id',
'lft',
'rgt',
'is_private',
'closed_on',
'assigned_to_manager_id',
'assigned_to_customer_id',
'price_for_customer',
'max_price_for_developer',
'price_developer',
'type_price',
'paid',
],
]) ?>
</div>
<?php
use yii\helpers\Html;
use yii\grid\GridView;
?>
<div class="client_interface">
<div class="container">
<div class="right_box_top row">
<div class="col-md-6 col-xs-6 col-sm-12">
<h2><strong>Список задач</strong></h2>
</div>
<div class="col-md-6 col-xs-6 col-sm-12">
<div class="logo_taskon">
<span>Разработанно в: </span>
<a href=""><img src="/images/logo_taskon.png" height="44" width="135" alt=""></a>
</div>
</div>
</div>
<div class="right_box_top row">
<div class="col-md-3 col-xs-3 col-sm-12 dropdown-menu-my">
<button type="button" class="btn btn-success-2 dropdown-menu-my-button"><span class="glyphicon glyphicon-plus"></span> Добавить задачу</button>
</div>
<!-- <div class="col-md-9 col-xs-9 col-sm-12">
<div class="input-group">
<input type="text" class="form-control">
<span class="input-group-btn">
<button class="btn btn-default-2 btn-size-2" type="button"><span class="glyphicon glyphicon-search"></span></button>
</span>
</div>
</div> -->
</div>
<br>
<div class="table-responsive table-responsive-conf">
<table class="table">
<tr>
<td class="no_pad">
<div class="panel-group panel-group-2" id="accordion_2">
<div class="panel panel-default">
<div class="panel-heading table-responsive">
<table class="w100pr table_header">
<tbody>
<tr>
<td>
<p class="panel-title2 pull-left">
<a href=""><span class="glyphicon glyphicon-align-justify"></span></a>&nbsp;&nbsp;
<a href=""><strong>Задачи в работе</strong></a>&nbsp;&nbsp;
</p>
</td>
<td class="box_td">
<p><strong>Дата <br> поступления</strong></p>
</td>
<td class="box_td">
<p><strong>Срок <br> исполнения</strong></p>
</td>
<td class="box_td">
<p><strong>Стоимость <br> руб.</strong></p>
</td>
</tr>
</tbody>
</table>
</div>
<div id="collapse_1" class="panel-collapse collapse in">
<div class="panel-body panel-body-ex-1 color_on_cursor gray_box_2">
<table class="w100pr">
<tbody>
<tr>
<td class="box_td_fir">
<div class="arrov_poz pull-left">
<a href=""><span class="caret caret_top"></span></a>
<a href=""><span class="caret"></span></a>
</div>
<span>1777</span>
</td>
<td class="box_td_cont">
<p><strong>Ошибка при добавлении точки. Ошибка при добавлении запятой, ошибка при создании отправлений</strong></p>
</td>
<td class="box_td">
<span>23.09.2015</span>
</td>
<td class="box_td">
<span>24.08.2015</span>
</td>
<td class="box_td">
<p class="pull-left"><strong>17 000,17</strong></p>
<div class="tooltip_wr pull-right">
<div class="tooltip_box">Счет был выставлен</div>
<span class="tooltip_cont"><img src="/images/score_icon.jpg" height="24" width="19" alt=""></span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</td>
</tr>
</table>
</div>
<br>
<a href="" class="separator_close">Закрытые задачи</a>
<div class="panel-body panel-body-ex-1 panel-body-ex-2">
<div data-toggle="buttons">
<label class="btn pull-left active">
<input type="checkbox">
</label>
<div class="text-mes">
<p>Партлювация перемещает грунт как при нагреве</p>
</div>
</div>
</div>
<div class="panel-body panel-body-ex-1 panel-body-ex-2">
<div data-toggle="buttons">
<label class="btn pull-left active">
<input type="checkbox">
</label>
<div class="text-mes">
<p>Массоперенос, вследствие пространственной неоднородности почвенного покрова</p>
</div>
</div>
</div>
<div class="panel-body panel-body-ex-1 panel-body-ex-2">
<div data-toggle="buttons">
<label class="btn pull-left active">
<input type="checkbox">
</label>
<div class="text-mes">
<p>Аллювий аналитически дает тензиометр только в отсутствие</p>
</div>
</div>
</div>
<br>
<br>
</div>
</div>
\ No newline at end of file
......@@ -227,34 +227,30 @@ class UserAdminController extends \common\components\AdminController
$old_password = $model->password;
\yii::$app->controller->page_title = 'Редактирование пользователя <small>' . $model->name.'</small>';
\yii::$app->controller->tabs = [
"управление пользователями" => \yii\helpers\Url::toRoute("manage"),
];
\yii::$app->controller->breadcrumbs = [
['Все пользователи' => '/users/user-admin/manage'],
$model->name,
];
['Все пользователи' => '/users/user-admin/manage'],
$model->name,
];
if (isset($_POST['User']))
if($model->load(Yii::$app->request->post()))
{
$model->attributes = $_POST['User'];
$pwd = \Yii::$app->security->generatePasswordHash($_POST['User']['password']);
$model->password_c = $pwd;
$model->password = $pwd;
if ($model->validate())
if($model->password)
{
if ($_POST['User']['password'] != $old_password)
{
$model->password = \Yii::$app->security->generatePasswordHash($_POST['User']['password']);
}
$model->save(false);
$model->password = $model->password_c = \Yii::$app->security->generatePasswordHash($model->password);
}
else
{
$model->password = $model->password_c = $old_password;
}
if($model->save())
{
AuthAssignment::updateUserRole($model->id, $_POST['User']['role']);
$this->redirect(array(
return $this->redirect(array(
'/rbac/role-admin/manage',
'id'=> $model->id
));
......
<?php
// use common\modules\rbac\models\AuthItem;
use \yii\helpers\ArrayHelper;
use common\modules\users\models\User;
// use yii\helpers\ArrayHelper;
use common\modules\support\models\redmine\User as RedmineUser;
// $roles = AuthItem::find(
// ['type' => AuthItem::TYPE_ROLE],
// "name != '" . AuthItem::ROLE_GUEST . "'"
// )->all();
$js = <<<JS
visibleSupport();
$('#user-role').change(function(){
visibleSupport();
});
function visibleSupport()
{
if($('#user-role').val() == 'support')
{
$('#user-support_id').closest('.form-group').show();
}
else
{
$('#user-support_id').closest('.form-group').hide();
}
}
JS;
\Yii::$app->view->registerJs($js, \yii\web\View::POS_READY, 'SupportID');
$redmineUsers = RedmineUser::find()
->select(['*', "CONCAT(login, ' (', firstname, ' ', lastname, ')') AS specialName"])
->where(['type' => RedmineUser::TYPE_USER])
->all();
return [
'activeForm'=>[
......@@ -35,6 +55,11 @@ return [
'items' => User::$role_list,
'class' => 'form-control',
],
'support_id' => [
'type' => 'dropdownlist',
'items' => ArrayHelper::map($redmineUsers, 'id', 'specialName'),
'class' => 'form-control',
],
'password' => ['type' => 'password', 'class' => 'form-control', 'pwd-id' => 'passwordStrengthDiv'],
'password_c' => ['type' => 'password', 'class' => 'form-control', 'pwd-id' => 'passwordStrengthDiv2'],
],
......
......@@ -42,6 +42,7 @@ class User extends \common\components\ActiveRecordModel implements IdentityInter
const ROLE_ADMIN = 'admin';
const ROLE_USER = 'user';
const ROLE_SUPPORT = 'support';
const GENDER_MAN = "man";
const GENDER_WOMAN = "woman";
......@@ -83,6 +84,7 @@ class User extends \common\components\ActiveRecordModel implements IdentityInter
public static $role_list = [
self::ROLE_ADMIN => 'Доступ в админ-панель',
self::ROLE_USER => 'Доступ к сайту',
self::ROLE_SUPPORT => 'Клиент тех. поддержки',
];
public static $occupation_list = [
......@@ -111,6 +113,7 @@ class User extends \common\components\ActiveRecordModel implements IdentityInter
$attrs = array_merge(parent::attributeLabels(), array(
"password_c" => "Пароль еще раз",
"fio" => "Фамилия имя отчество",
'support_id' => 'Пользователь из Redmine',
"name" => "Имя",
"surname" => "Фамилия",
"remember_me" => "Запомни меня",
......@@ -141,7 +144,7 @@ class User extends \common\components\ActiveRecordModel implements IdentityInter
self::SCENARIO_SEND_NEW_PASSWORD,
self::SCENARIO_RECOVER_PASSWORD
], 'message' => 'Пожалуйста, укажите корректный e-mail адрес'],
[['send_email'], 'safe'],
[['send_email', 'support_id'], 'safe'],
[['fio','name', 'surname'], 'safe', 'on' => [
self::SCENARIO_CREATE,
], 'message' => 'Пожалуйста, укажите Ваше имя'],
......@@ -391,16 +394,6 @@ class User extends \common\components\ActiveRecordModel implements IdentityInter
return 'Введенный E-mail адрес некорректен. Пожалуйста, проверьте правильность ввода';
}
public function relations()
{
return array(
'assignment' => array(self::HAS_ONE, 'AuthAssignment', 'user_id'),
'city' => array(self::BELONGS_TO, 'City', 'city_id'),
//'eauth' => array(self::HAS_ONE, 'UserEAuth', 'user_id'),
);
}
public function getEauth()
{
return $this->hasOne(UserEAuth::className(), ['user_id'=>'id']);
......@@ -411,7 +404,6 @@ class User extends \common\components\ActiveRecordModel implements IdentityInter
return $this->hasOne(AuthAssignment::className(), ['user_id'=>'id']);
}
public function search($params)
{
$query = User::find();
......
<?php
use yii\db\Schema;
use yii\db\Migration;
class m160303_110638_update_users extends Migration
{
// Use safeUp/safeDown to run migration code within a transaction
public function safeUp()
{
$this->addColumn('users', 'support_id', Schema::TYPE_INTEGER . '(11) DEFAULT NULL AFTER id');
}
public function safeDown()
{
$this->dropColumn('users', 'support_id');
}
}
......@@ -24,6 +24,7 @@ return [
'testings' => ['class' => 'common\modules\testings\Module',],
'users' => ['class' => 'common\modules\users\users',],
'blog' => ['class' => 'common\modules\blog\Module'],
'support' => ['class' => 'common\modules\support\Module'],
'sessions' => ['class' => 'common\modules\sessions\Module'],
'sitemap' => [
'class' => 'frontend\modules\sitemap\Sitemap',
......@@ -70,12 +71,26 @@ return [
],
'user' => [
'identityClass' => 'common\modules\users\models\User',
'identityCookie' => [
'name' => '_frontendIdentity'
],
'enableAutoLogin' => true,
'loginUrl' => ['/site/login'],
],
'support' => [
'class' => 'yii\web\User',
'identityClass' => 'common\modules\users\models\User',
'identityCookie' => [
'name' => '_supportIdentity',
'httpOnly' => true
],
'idParam' => '__supportID',
'enableAutoLogin' => true,
'loginUrl' => ['/support/login'],
],
'session' => [
'class' => 'yii\web\Session',
'timeout'=>3600,
'timeout' => 3600,
],
'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
......@@ -120,8 +135,8 @@ return [
'/js/libs/jquery/jquery-1.11.2.min.js'
],
'jsOptions' => [
//'position' => \yii\web\View::POS_HEAD,
'position' => \yii\web\View::POS_BEGIN,
'position' => \yii\web\View::POS_HEAD,
// 'position' => \yii\web\View::POS_BEGIN,
],
],
'yii\jui\JuiAsset' => [
......@@ -159,6 +174,10 @@ return [
'blog/<url>' => 'blog/post/view',
'testing/<_a>/<id:\d+>' => 'testings/test/<_a>',
'testing/<_a>' => 'testings/test/<_a>',
'support/login' => 'support/default/login',
'support/logout' => 'support/default/logout',
'support' => 'support/support/index',
'support/<_a>' => 'support/support/<_a>',
'school' => 'school/course/index',
'school/course/<id>' => 'school/course/view',
'school/lesson/<id>' => 'school/lesson/view',
......
......@@ -9,6 +9,7 @@ use yii\filters\AccessControl;
use yii\helpers\Url;
use common\models\LoginForm;
use common\modules\users\models\User;
use common\modules\eauth\components\GoogleOAuth2Service;
use common\modules\eauth\models\UserEAuth;
......@@ -159,13 +160,23 @@ class SiteController extends Controller
}
//Yii::$app->user->getIdentity()->getRole()
$model = new LoginForm();
$model->load(Yii::$app->request->post());
if ($model->validate()) {
Yii::$app->user->login($model->getUser(), $model->rememberMe ? 3600 * 24 * 30 : 0);
$this->redirect(array("/school/course/index"));
} else {
echo json_encode(array('errors'=>$model->getErrors()));
$model = new LoginForm();
if ($model->load(Yii::$app->request->post()) && $model->validate())
{
if($model->user->role == User::ROLE_USER)
{
$model->login();
}
else
{
echo json_encode(['errors' => []]);
}
$this->redirect(array("/school/course/index"));
}
else
{
echo json_encode(array('errors'=>$model->getErrors()));
}
}
......
This diff is collapsed.
This diff is collapsed.
[.ShellClassInfo]
InfoTip= .
IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe
IconIndex=16
\ No newline at end of file
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
/*
Template Name: Color Admin - Responsive Admin Dashboard Template build with Twitter Bootstrap 3.3.2
Version: 1.6.0
Author: Sean Ngu
Website: http://www.seantheme.com/color-admin-v1.6/admin/
*/
.navbar-logo,
.coming-soon .brand .logo,
.login .login-header .brand .logo {
border-color: #626668 #565b5e #414446;
}
.navbar.navbar-inverse .navbar-brand,
.sidebar .nav > li.active > a,
.sidebar .nav > li.active > a:focus,
.sidebar .nav > li.active > a:hover,
.page-sidebar-minified .sidebar .nav > li.has-sub.active:focus > a,
.page-sidebar-minified .sidebar .nav > li.has-sub.active:hover > a,
.page-sidebar-minified .sidebar .nav > li.has-sub.active > a,
.label.label-theme,
.btn.btn-scroll-to-top {
background: #6C7275;
}
.navbar.navbar-inverse .navbar-brand {
color: #fff !important;
}
.text-theme {
color: #6C7275;
}
.sidebar .sub-menu > li.active > a:before {
color: #fff;
}
@media (max-width: 767px) {
.navbar-inverse .navbar-header {
background: #6C7275;
}
}
/* Added in v1.5 */
.gradient-enabled .navbar.navbar-inverse .navbar-brand,
.gradient-enabled .sidebar .nav > li.active > a,
.gradient-enabled .sidebar .nav > li.active > a:focus,
.gradient-enabled .sidebar .nav > li.active > a:hover,
.gradient-enabled.page-sidebar-minified .sidebar .nav > li.has-sub.active:focus > a,
.gradient-enabled.page-sidebar-minified .sidebar .nav > li.has-sub.active:hover > a,
.gradient-enabled.page-sidebar-minified .sidebar .nav > li.has-sub.active > a,
.gradient-enabled .label.label-theme,
.gradient-enabled .btn.btn-scroll-to-top {
background: rgb(136,136,136); /* Old browsers */
/* IE9 SVG, needs conditional override of 'filter' to 'none' */
background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzg4ODg4OCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM2YzcyNzUiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);
background: -moz-linear-gradient(top, rgba(136,136,136,1) 0%, rgba(108,114,117,1) 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(136,136,136,1)), color-stop(100%,rgba(108,114,117,1))); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, rgba(136,136,136,1) 0%,rgba(108,114,117,1) 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, rgba(136,136,136,1) 0%,rgba(108,114,117,1) 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, rgba(136,136,136,1) 0%,rgba(108,114,117,1) 100%); /* IE10+ */
background: linear-gradient(to bottom, rgba(136,136,136,1) 0%,rgba(108,114,117,1) 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#888888', endColorstr='#6c7275',GradientType=0 ); /* IE6-8 */
}
.pace-progress {
background: #6C7275;
}
.pace .pace-activity {
border-top-color: #6C7275;
border-left-color: #6C7275;
}
\ No newline at end of file
/*
Template Name: Color Admin - Responsive Admin Dashboard Template build with Twitter Bootstrap 3.3.2
Version: 1.6.0
Author: Sean Ngu
Website: http://www.seantheme.com/color-admin-v1.6/admin/
*/
.navbar-logo,
.coming-soon .brand .logo,
.login .login-header .brand .logo {
border-color: #2F83CF #2a72b5 #1f5688;
}
.navbar.navbar-inverse .navbar-brand,
.sidebar .nav > li.active > a,
.sidebar .nav > li.active > a:focus,
.sidebar .nav > li.active > a:hover,
.page-sidebar-minified .sidebar .nav > li.has-sub.active:focus > a,
.page-sidebar-minified .sidebar .nav > li.has-sub.active:hover > a,
.page-sidebar-minified .sidebar .nav > li.has-sub.active > a,
.label.label-theme,
.btn.btn-scroll-to-top {
background: #348fe2;
}
.navbar.navbar-inverse .navbar-brand {
color: #fff !important;
}
.text-theme,
.sidebar .sub-menu > li.active > a:before {
color: #348fe2;
}
@media (max-width: 767px) {
.navbar-inverse .navbar-header {
background: #348fe2;
}
}
/* Added in v1.5 */
.gradient-enabled .navbar.navbar-inverse .navbar-brand,
.gradient-enabled .sidebar .nav > li.active > a,
.gradient-enabled .sidebar .nav > li.active > a:focus,
.gradient-enabled .sidebar .nav > li.active > a:hover,
.gradient-enabled.page-sidebar-minified .sidebar .nav > li.has-sub.active:focus > a,
.gradient-enabled.page-sidebar-minified .sidebar .nav > li.has-sub.active:hover > a,
.gradient-enabled.page-sidebar-minified .sidebar .nav > li.has-sub.active > a,
.gradient-enabled .label.label-theme,
.gradient-enabled .btn.btn-scroll-to-top {
background: rgb(103,176,240); /* Old browsers */
/* IE9 SVG, needs conditional override of 'filter' to 'none' */
background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzY3YjBmMCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMzNDhmZTIiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);
background: -moz-linear-gradient(top, rgba(103,176,240,1) 0%, rgba(52,143,226,1) 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(103,176,240,1)), color-stop(100%,rgba(52,143,226,1))); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, rgba(103,176,240,1) 0%,rgba(52,143,226,1) 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, rgba(103,176,240,1) 0%,rgba(52,143,226,1) 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, rgba(103,176,240,1) 0%,rgba(52,143,226,1) 100%); /* IE10+ */
background: linear-gradient(to bottom, rgba(103,176,240,1) 0%,rgba(52,143,226,1) 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#67b0f0', endColorstr='#348fe2',GradientType=0 ); /* IE6-8 */
}
.pace-progress {
background: #348fe2;
}
.pace .pace-activity {
border-top-color: #348fe2;
border-left-color: #348fe2;
}
\ No newline at end of file
/*
Template Name: Color Admin - Responsive Admin Dashboard Template build with Twitter Bootstrap 3.3.2
Version: 1.6.0
Author: Sean Ngu
Website: http://www.seantheme.com/color-admin-v1.6/admin/
*/
.navbar-logo,
.coming-soon .brand .logo,
.login .login-header .brand .logo {
border-color: #4DCACA #31A3A3 #1D8888;
}
.navbar.navbar-inverse .navbar-brand,
.sidebar .nav > li.active > a,
.sidebar .nav > li.active > a:focus,
.sidebar .nav > li.active > a:hover,
.page-sidebar-minified .sidebar .nav > li.has-sub.active:focus > a,
.page-sidebar-minified .sidebar .nav > li.has-sub.active:hover > a,
.page-sidebar-minified .sidebar .nav > li.has-sub.active > a,
.label.label-theme,
.btn.btn-scroll-to-top {
background: #79C137;
}
.navbar.navbar-inverse .navbar-brand {
color: #fff !important;
}
.text-theme,
.sidebar .sub-menu > li.active > a:before {
color: #79C137;
}
@media (max-width: 767px) {
.navbar-inverse .navbar-header {
background: #00acac;
}
}
/* Added in v1.5 */
.gradient-enabled .navbar.navbar-inverse .navbar-brand,
.gradient-enabled .sidebar .nav > li.active > a,
.gradient-enabled .sidebar .nav > li.active > a:focus,
.gradient-enabled .sidebar .nav > li.active > a:hover,
.gradient-enabled.page-sidebar-minified .sidebar .nav > li.has-sub.active:focus > a,
.gradient-enabled.page-sidebar-minified .sidebar .nav > li.has-sub.active:hover > a,
.gradient-enabled.page-sidebar-minified .sidebar .nav > li.has-sub.active > a,
.gradient-enabled .label.label-theme,
.gradient-enabled .btn.btn-scroll-to-top {
background: rgb(0,210,210); /* Old browsers */
/* IE9 SVG, needs conditional override of 'filter' to 'none' */
background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwZDJkMiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMGFjYWMiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);
background: -moz-linear-gradient(top, rgba(0,210,210,1) 0%, rgba(0,172,172,1) 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(0,210,210,1)), color-stop(100%,rgba(0,172,172,1))); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, rgba(0,210,210,1) 0%,rgba(0,172,172,1) 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, rgba(0,210,210,1) 0%,rgba(0,172,172,1) 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, rgba(0,210,210,1) 0%,rgba(0,172,172,1) 100%); /* IE10+ */
background: linear-gradient(to bottom, rgba(0,210,210,1) 0%,rgba(0,172,172,1) 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00d2d2', endColorstr='#00acac',GradientType=0 ); /* IE6-8 */
}
.pace-progress {
background: #00acac;
}
.pace .pace-activity {
border-top-color: #00acac;
border-left-color: #00acac;
}
\ No newline at end of file
/*
Template Name: Color Admin - Responsive Admin Dashboard Template build with Twitter Bootstrap 3.3.2
Version: 1.6.0
Author: Sean Ngu
Website: http://www.seantheme.com/color-admin-v1.6/admin/
*/
.navbar-logo,
.coming-soon .brand .logo,
.login .login-header .brand .logo {
border-color: #DF8F19 #c47d15 #935e10;
}
.navbar.navbar-inverse .navbar-brand,
.sidebar .nav > li.active > a,
.sidebar .nav > li.active > a:focus,
.sidebar .nav > li.active > a:hover,
.page-sidebar-minified .sidebar .nav > li.has-sub.active:focus > a,
.page-sidebar-minified .sidebar .nav > li.has-sub.active:hover > a,
.page-sidebar-minified .sidebar .nav > li.has-sub.active > a,
.label.label-theme,
.btn.btn-scroll-to-top {
background: #f59c1a;
}
.navbar.navbar-inverse .navbar-brand {
color: #fff !important;
}
.text-theme,
.sidebar .sub-menu > li.active > a:before {
color: #f59c1a;
}
@media (max-width: 767px) {
.navbar-inverse .navbar-header {
background: #f59c1a;
}
}
/* Added in v1.5 */
.gradient-enabled .navbar.navbar-inverse .navbar-brand,
.gradient-enabled .sidebar .nav > li.active > a,
.gradient-enabled .sidebar .nav > li.active > a:focus,
.gradient-enabled .sidebar .nav > li.active > a:hover,
.gradient-enabled.page-sidebar-minified .sidebar .nav > li.has-sub.active:focus > a,
.gradient-enabled.page-sidebar-minified .sidebar .nav > li.has-sub.active:hover > a,
.gradient-enabled.page-sidebar-minified .sidebar .nav > li.has-sub.active > a,
.gradient-enabled .label.label-theme,
.gradient-enabled .btn.btn-scroll-to-top {
background: rgb(253,182,79); /* Old browsers */
/* IE9 SVG, needs conditional override of 'filter' to 'none' */
background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZkYjY0ZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmNTljMWEiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);
background: -moz-linear-gradient(top, rgba(253,182,79,1) 0%, rgba(245,156,26,1) 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(253,182,79,1)), color-stop(100%,rgba(245,156,26,1))); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, rgba(253,182,79,1) 0%,rgba(245,156,26,1) 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, rgba(253,182,79,1) 0%,rgba(245,156,26,1) 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, rgba(253,182,79,1) 0%,rgba(245,156,26,1) 100%); /* IE10+ */
background: linear-gradient(to bottom, rgba(253,182,79,1) 0%,rgba(245,156,26,1) 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdb64f', endColorstr='#f59c1a',GradientType=0 ); /* IE6-8 */
}
.pace-progress {
background: #f59c1a;
}
.pace .pace-activity {
border-top-color: #f59c1a;
border-left-color: #f59c1a;
}
\ No newline at end of file
/*
Template Name: Color Admin - Responsive Admin Dashboard Template build with Twitter Bootstrap 3.3.2
Version: 1.6.0
Author: Sean Ngu
Website: http://www.seantheme.com/color-admin-v1.6/admin/
*/
.navbar-logo,
.coming-soon .brand .logo,
.login .login-header .brand .logo {
border-color: #6670AC #5b6392 #444a6d;
}
.navbar.navbar-inverse .navbar-brand,
.sidebar .nav > li.active > a,
.sidebar .nav > li.active > a:focus,
.sidebar .nav > li.active > a:hover,
.page-sidebar-minified .sidebar .nav > li.has-sub.active:focus > a,
.page-sidebar-minified .sidebar .nav > li.has-sub.active:hover > a,
.page-sidebar-minified .sidebar .nav > li.has-sub.active > a,
.label.label-theme,
.btn.btn-scroll-to-top {
background: #727cb6;
}
.navbar.navbar-inverse .navbar-brand {
color: #fff !important;
}
.text-theme,
.sidebar .sub-menu > li.active > a:before {
color: #727cb6;
}
@media (max-width: 767px) {
.navbar-inverse .navbar-header {
background: #727cb6;
}
}
/* Added in v1.5 */
.gradient-enabled .navbar.navbar-inverse .navbar-brand,
.gradient-enabled .sidebar .nav > li.active > a,
.gradient-enabled .sidebar .nav > li.active > a:focus,
.gradient-enabled .sidebar .nav > li.active > a:hover,
.gradient-enabled.page-sidebar-minified .sidebar .nav > li.has-sub.active:focus > a,
.gradient-enabled.page-sidebar-minified .sidebar .nav > li.has-sub.active:hover > a,
.gradient-enabled.page-sidebar-minified .sidebar .nav > li.has-sub.active > a,
.gradient-enabled .label.label-theme,
.gradient-enabled .btn.btn-scroll-to-top {
background: rgb(134,142,192); /* Old browsers */
/* IE9 SVG, needs conditional override of 'filter' to 'none' */
background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzg2OGVjMCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM3MjdjYjYiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);
background: -moz-linear-gradient(top, rgba(134,142,192,1) 0%, rgba(114,124,182,1) 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(134,142,192,1)), color-stop(100%,rgba(114,124,182,1))); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, rgba(134,142,192,1) 0%,rgba(114,124,182,1) 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, rgba(134,142,192,1) 0%,rgba(114,124,182,1) 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, rgba(134,142,192,1) 0%,rgba(114,124,182,1) 100%); /* IE10+ */
background: linear-gradient(to bottom, rgba(134,142,192,1) 0%,rgba(114,124,182,1) 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#868ec0', endColorstr='#727cb6',GradientType=0 ); /* IE6-8 */
}
.pace-progress {
background: #727cb6;
}
.pace .pace-activity {
border-top-color: #727cb6;
border-left-color: #727cb6;
}
\ No newline at end of file
/*
Template Name: Color Admin - Responsive Admin Dashboard Template build with Twitter Bootstrap 3.3.2
Version: 1.6.0
Author: Sean Ngu
Website: http://www.seantheme.com/color-admin-v1.6/admin/
*/
.navbar-logo,
.coming-soon .brand .logo,
.login .login-header .brand .logo {
border-color: #F8504B #cc4946 #993734;
}
.navbar.navbar-inverse .navbar-brand,
.sidebar .nav > li.active > a,
.sidebar .nav > li.active > a:focus,
.sidebar .nav > li.active > a:hover,
.page-sidebar-minified .sidebar .nav > li.has-sub.active:focus > a,
.page-sidebar-minified .sidebar .nav > li.has-sub.active:hover > a,
.page-sidebar-minified .sidebar .nav > li.has-sub.active > a,
.label.label-theme,
.btn.btn-scroll-to-top {
background: #ff5b57;
}
.navbar.navbar-inverse .navbar-brand {
color: #fff !important;
}
.text-theme,
.sidebar .sub-menu > li.active > a:before {
color: #ff5b57;
}
@media (max-width: 767px) {
.navbar-inverse .navbar-header {
background: #ff5b57;
}
}
/* Added in v1.5 */
.gradient-enabled .navbar.navbar-inverse .navbar-brand,
.gradient-enabled .sidebar .nav > li.active > a,
.gradient-enabled .sidebar .nav > li.active > a:focus,
.gradient-enabled .sidebar .nav > li.active > a:hover,
.gradient-enabled.page-sidebar-minified .sidebar .nav > li.has-sub.active:focus > a,
.gradient-enabled.page-sidebar-minified .sidebar .nav > li.has-sub.active:hover > a,
.gradient-enabled.page-sidebar-minified .sidebar .nav > li.has-sub.active > a,
.gradient-enabled .label.label-theme,
.gradient-enabled .btn.btn-scroll-to-top {
background: rgb(253,128,125); /* Old browsers */
/* IE9 SVG, needs conditional override of 'filter' to 'none' */
background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZkODA3ZCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZjViNTciIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);
background: -moz-linear-gradient(top, rgba(253,128,125,1) 0%, rgba(255,91,87,1) 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(253,128,125,1)), color-stop(100%,rgba(255,91,87,1))); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, rgba(253,128,125,1) 0%,rgba(255,91,87,1) 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, rgba(253,128,125,1) 0%,rgba(255,91,87,1) 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, rgba(253,128,125,1) 0%,rgba(255,91,87,1) 100%); /* IE10+ */
background: linear-gradient(to bottom, rgba(253,128,125,1) 0%,rgba(255,91,87,1) 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fd807d', endColorstr='#ff5b57',GradientType=0 ); /* IE6-8 */
}
.pace-progress {
background: #ff5b57;
}
.pace .pace-activity {
border-top-color: #ff5b57;
border-left-color: #ff5b57;
}
\ No newline at end of file
[.ShellClassInfo]
InfoTip= .
IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe
IconIndex=16
\ No newline at end of file
[.ShellClassInfo]
InfoTip= .
IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe
IconIndex=16
\ No newline at end of file
[.ShellClassInfo]
InfoTip= .
IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe
IconIndex=16
\ No newline at end of file
[.ShellClassInfo]
InfoTip= .
IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe
IconIndex=16
\ No newline at end of file
[.ShellClassInfo]
InfoTip= .
IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe
IconIndex=16
\ No newline at end of file
frontend/web/images/about_img.jpg

213 KB | W: | H:

frontend/web/images/about_img.jpg

64.2 KB | W: | H:

frontend/web/images/about_img.jpg
frontend/web/images/about_img.jpg
frontend/web/images/about_img.jpg
frontend/web/images/about_img.jpg
  • 2-up
  • Swipe
  • Onion skin
[.ShellClassInfo]
InfoTip= .
IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe
IconIndex=16
\ No newline at end of file
[.ShellClassInfo]
InfoTip= .
IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe
IconIndex=16
\ No newline at end of file
$(function() {
$('.datepicker-autoClose').datepicker({
dateFormat: 'dd.mm.yy',
todayHighlight: true,
regional: 'ru',
autoclose: true,
todayBtn: true
});
$('.datetimepicker-autoClose').datetimepicker({
todayHighlight: true,
language: 'ru',
autoclose: true,
todayBtn: true,
format: 'dd.mm.yyyy hh:ii'
});
FormSliderSwitcher.init();
tinymce.init({
selector: "textarea",theme: "modern",
language: "ru",
custom_elements: "emstart,emend,header,main,span",
extended_valid_elements: "span[id|name|class|style],i[id|name|class|style],ul[id|name|class|style],li[id|name|class|style]",
height: '350px',
menubar: "edit insert view format table tools",
plugins: [
"advlist autolink link image code lists charmap print preview hr anchor pagebreak",
"searchreplace wordcount visualblocks visualchars insertdatetime media nonbreaking",
"table contextmenu directionality emoticons paste textcolor responsivefilemanager codesample"
],
toolbar1: "undo redo | bold italic underline | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | codesample | styleselect",
toolbar2: "| responsivefilemanager | link unlink anchor | image media | forecolor backcolor | print preview code ",
image_advtab: true ,
forced_root_block : false,
force_br_newlines : false,
force_p_newlines : true,
external_filemanager_path:"/filemanager/",
filemanager_title:"Responsive Filemanager" ,
external_plugins: { "filemanager" : "/filemanager/plugin.min.js"}
});
});
jQuery(document).ready(function(){
$(".important_button").click(function () {
$(this).toggleClass("important_button_active");
});
$(".important_button").click(function () {
$(".important_button_text").toggleClass("important_button_text_active");
});
});
[.ShellClassInfo]
InfoTip= .
IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe
IconIndex=16
\ No newline at end of file
[.ShellClassInfo]
InfoTip= .
IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe
IconIndex=16
\ No newline at end of file
[.ShellClassInfo]
InfoTip= .
IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe
IconIndex=16
\ No newline at end of file
[.ShellClassInfo]
InfoTip= .
IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe
IconIndex=16
\ No newline at end of file
[.ShellClassInfo]
InfoTip= .
IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe
IconIndex=16
\ No newline at end of file
[.ShellClassInfo]
InfoTip= .
IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe
IconIndex=16
\ No newline at end of file
[.ShellClassInfo]
InfoTip= .
IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe
IconIndex=16
\ No newline at end of file
[.ShellClassInfo]
InfoTip= .
IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe
IconIndex=16
\ No newline at end of file
[.ShellClassInfo]
InfoTip= .
IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe
IconIndex=16
\ No newline at end of file
[.ShellClassInfo]
InfoTip= .
IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe
IconIndex=16
\ No newline at end of file
[.ShellClassInfo]
InfoTip= .
IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe
IconIndex=16
\ No newline at end of file
[.ShellClassInfo]
InfoTip= .
IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe
IconIndex=16
\ No newline at end of file
/*
Template Name: Color Admin - Responsive Admin Dashboard Template build with Twitter Bootstrap 3.3.2
Version: 1.6.0
Author: Sean Ngu
Website: http://www.seantheme.com/color-admin-v1.6/admin/
*/var handleLoginPageChangeBackground=function(){$('[data-click="change-bg"]').live("click",function(){var e='[data-id="login-cover-image"]';var t=$(this).find("img").attr("src");var n='<img src="'+t+'" data-id="login-cover-image" />';$(".login-cover-image").prepend(n);$(e).not('[src="'+t+'"]').fadeOut("slow",function(){$(this).remove()});$('[data-click="change-bg"]').closest("li").removeClass("active");$(this).closest("li").addClass("active")})};var LoginV2=function(){"use strict";return{init:function(){handleLoginPageChangeBackground()}}}()
\ No newline at end of file
/**
* Created by JetBrains PhpStorm.
* User: Alex
* Date: 04.12.11
* Time: 12:37
* To change this template use File | Settings | File Templates.
*/
(function($)
{
$.widget('CmsUI.buttonSet', {
_version:0.1,
version:function()
{
return this._version
},
options:{
buttonSettings:{},
buttonStyle:{
cursor:'pointer',
margin:2
},
buttonTextStyle:{
lineHeight:'normal',
paddingTop:0,
paddingBottom:0,
paddingLeft:'.5em'
}
},
_makeButton:function(element, label, buttonSettings)
{
this.options.buttonSettings.label = $.trim(label);
this.options.buttonSettings = $.extend(this.options.buttonSettings, buttonSettings);
return $(element)
.button(this.options.buttonSettings)
.css(this.options.buttonStyle)
.children('.ui-button-text')
.css(this.options.buttonTextStyle)
.end();
},
_makeCloseButton:function(element, label)
{
this.options.buttonSettings = {
icons:{ secondary:'ui-icon-close' }
};
return this._makeButton(element, label);
},
_makePlusButton:function(element, label)
{
this.options.buttonSettings = {
icons:{ primary:'ui-icon-plus' }
};
this.options.buttonTextStyle.paddingLeft = '24px';
return this._makeButton(element, label);
}
})
})(jQuery)
\ No newline at end of file
(function($)
{
/**
* Этот плагин берет на себя работу по синхронизации с плагином Yii,
* а так же предоставляет простой API для реализации на его основе своих плагинов
*
* Плагин изначально вызывает метод _initHandlers
* используйте его для инициализации своих скриптов
* После ajaxUpdate(метод yiiGridView) этот метод будет вызван повторно,
* поэтому нет необходимости использовать live или delegate
*
* На одну таблицу можо вешать неограниченное количество плагинов основанных на CmsUI.gridBase
* Но, т.к. мы зависим от yiiGridView, то инициализация этих плагинов, должна произойти
* после инициализации yiiGridView
* Т.е. если вы хотите проинициализировать плагин из какой-либо колонки,
* то для этого в компоненте GridView предусмотренно событие onRegisterScript.
* В методе init колонки, используйте $this->grid->onRegisterScript = array($this, 'registerScript');
* и в методе registerScript вашего класса регистрируйте любые скрипты.
*/
$.widget('CmsUI.gridBase', {
_version:0.1,
version:function()
{
return this._version
},
// default options
options:{
},
_create:function()
{
var self = this,
id = self.element.attr('id');
var func = self.element.yiiGridView.settings[id].afterAjaxUpdate;
self.element.yiiGridView.settings[id].afterAjaxUpdate = function(id, data)
{
if (func != undefined)
{
func(id, data);
}
self.element = $('#' + id); //because yiiGridView make replaceWith on our element
self._initHandlers();
};
self._initHandlers();
},
_initHandlers:function() //there run functions for initialize some event handlers
{
},
//default settings for plugins
//default options for sortable
defaultSortable:{
axis:"y",
revert:true,
cursor:"pointer",
items:'tr',
delay:100,
distance:5,
opacity:0.8,
handle:".positioner",
forcePlaceholderSize:true,
forceHelperSize:true,
helper:function(e, ui)
{
ui.children().each(function()
{
$(this).width($(this).width());
});
return ui;
},
tolerance:"pointer",
placeholder:'placeholder',
// helper:'clone',
start:function(event, ui)
{
ui.placeholder.html("<td colspan='100%'>&nbsp;</td>");
ui.placeholder.css('height', ui.item.height());
}
},
defaultJeditable:{
indicator:'<img src=\'/images/admin/ajax-loader.gif\'>',
tooltip:'Клик для редактирования...',
event:'click',
style:'inherit',
width:'50px'
}
});
})(jQuery);
/*!
* jQuery Cookie Plugin v1.3.1
* https://github.com/carhartl/jquery-cookie
*
* Copyright 2013 Klaus Hartl
* Released under the MIT license
*/
(function (factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as anonymous module.
define(['jquery'], factory);
} else {
// Browser globals.
factory(jQuery);
}
}(function ($) {
var pluses = /\+/g;
function raw(s) {
return s;
}
function decoded(s) {
return decodeURIComponent(s.replace(pluses, ' '));
}
function converted(s) {
if (s.indexOf('"') === 0) {
// This is a quoted cookie as according to RFC2068, unescape
s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
}
try {
return config.json ? JSON.parse(s) : s;
} catch(er) {}
}
var config = $.cookie = function (key, value, options) {
// write
if (value !== undefined) {
options = $.extend({}, config.defaults, options);
if (typeof options.expires === 'number') {
var days = options.expires, t = options.expires = new Date();
t.setDate(t.getDate() + days);
}
value = config.json ? JSON.stringify(value) : String(value);
return (document.cookie = [
config.raw ? key : encodeURIComponent(key),
'=',
config.raw ? value : encodeURIComponent(value),
options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
options.path ? '; path=' + options.path : '',
options.domain ? '; domain=' + options.domain : '',
options.secure ? '; secure' : ''
].join(''));
}
// read
var decode = config.raw ? raw : decoded;
var cookies = document.cookie.split('; ');
var result = key ? undefined : {};
for (var i = 0, l = cookies.length; i < l; i++) {
var parts = cookies[i].split('=');
var name = decode(parts.shift());
var cookie = decode(parts.join('='));
if (key && key === name) {
result = converted(cookie);
break;
}
if (!key) {
result[name] = converted(cookie);
}
}
return result;
};
config.defaults = {};
$.removeCookie = function (key, options) {
if ($.cookie(key) !== undefined) {
// Must not alter options, thus extending a fresh object...
$.cookie(key, '', $.extend({}, options, { expires: -1 }));
return true;
}
return false;
};
}));
\ No newline at end of file
#!/bin/sh
cd "$(dirname "$0")"
cd ../.git/hooks
ln -s ../../.githooks/pre-commit .
ln -s ../../.githooks/post-commit .
#!/bin/sh
if [ -a .commit ]; then
rm .commit
git add js/tag-it.min.js
git commit --amend -C HEAD --no-verify -q
fi
make gh-pages
hr + h3, hr + h4 {
margin-top: 0;
}
hr {
margin-bottom: .4em;
}
ul#nav li {
padding:0;
}
.myform {
padding:20px 0px;
}
.myform div.line {
clear:both;
min-height:50px;
margin-bottom:15px;
}
.myform label {
display:block;
font-weight:bold;
margin-bottom:5px;
}
#events_container {
font-size:.8em;
}
@charset "UTF-8";
html, body {
color:#333;
background:#002F2F/*#232f2e*/;
line-height:1.4;
margin:0;
padding:0;
font-family: 'Lucida Grande', arial, sans-serif;
}
a {
color:#636363;
/*color:#1155bd;*/
}
a:hover {
text-decoration:none;
}
hr {
border: none;
background-color: #ccc;
height: 6px;
margin: 1em 0;
}
em {
font-style:italic;
}
h1,h2,h3 {
/*color:#4f6f6c;*/
color:#046380;
font-family: 'Brawler', arial, sans-serif;
font-weight: normal;
}
h1,h2,h3,h4 {
margin:1.8em 0 .5em 0;
}
h1 {
font-size:2.6em;
}
h2 {
font-size:1.8em;
}
h3 {
font-size:1.5em;
}
h4 {
font-size:129%;
}
p {
margin: 1.0em 0 1em 0;
}
pre {
background:#eee;
border:1px solid #ccc;
font-size:100%;
overflow:auto;
margin:0 0 20px;
padding:20px;
}
code {
font-size:100%;
margin:0;
padding:0;
}
#wrapper ul, #wrapper li {
list-style:disc;
}
div#wrapper {
background:#fff;
width:560px;
border:10px solid #0f1616;
border-width:0 10px 10px;
margin:0 auto;
padding:15px 20px;
}
div#header {
position:relative;
border-bottom:1px dotted;
margin:0 0 10px;
padding:0 0 4px;
}
ul#nav {
position:absolute;
top:.7em;
right:-7px;
list-style:none;
margin:0;
padding:0;
}
ul#nav li {
display:inline;
padding:0 0 0 2px;
font-size: 1.2em;
font-weight: bold;
}
ul#nav a, .highlighted {
background-color:#FFF8AC;
padding: .3em .4em;
}
ul#nav a {
padding: .4em .5em;
}
#twitter {
position:absolute;
top:3.1em;
right:0;
width:106px;
padding: .6em .6em .4em .65em;
}
#footer {
border-top:1px dotted;
margin:40px 0 0;
padding:10px 0 0;
font-size: .8em;
}
.left {
float:left;
}
.right {
float:right;
}
.clear {
clear:both;
}
.multiselect {
width:460px;
height:200px;
}
#switcher {
margin-top:20px;
}
strong,h1,h4,h5,h6 {
font-weight:bold;
}
#header p,#header h1,form {
margin:0;
padding:0;
}
#header h1 {
margin-bottom: .2em;
}
.weak, .weak a, .weak a:visited {
color: gray;
}
hr + h2, hr + h3 {
margin-top: .5em;
}
form + hr, p + hr {
margin-top: 2em;
}
label {
float: left;
width: 38px;
margin-right: 1em;
margin-bottom:.5em;
font-size: 1.2em;
}
ul.tagit {
width: 495px;
}
#tag-icon {
float: left;
margin-right: 1.4em;
position: relative;
top: .1em;
}
#title-jquery, #title-tag-it {
display: block;
}
#title-tag-it {
font-size: 1.2em;
}
#title-jquery {
font-size: .75em;
font-weight: normal;
position: relative;
left: .2em;
top: .1em;
}
#feature-list {
margin-top:2.5em;
}
#disqus-container {
margin-top: 2em;
}
#disqus-container h3 {
font-size: 1em;
font-family: inherit;
}
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
margin: 0;
padding: 0;
border: 0;
outline: 0;
font-size: 100%;
vertical-align: baseline;
background: transparent;
}
body {
line-height: 1;
}
ol, ul, li {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}
/* remember to define focus styles! */
:focus {
outline: 0;
}
/* remember to highlight inserts somehow! */
ins {
text-decoration: none;
}
del {
text-decoration: line-through;
}
/* tables still need 'cellspacing="0"' in the markup */
table {
border-collapse: collapse;
border-spacing: 0;
}
img, fieldset {
display:block;
border:none;
}
@charset "UTF-8";
#nav {
left:0;
}
#header {
padding-top:3em;
}
#header h1, #header h2 {
margin: 0 0 .2em 0;
padding-top: 1.8em;
}
ul.tagit {
padding: 1px 5px;
overflow: auto;
margin-left: inherit; /* usually we don't want the regular ul margins. */
margin-right: inherit;
}
ul.tagit li {
display: block;
float: left;
margin: 2px 5px 2px 0;
}
ul.tagit li.tagit-choice {
position: relative;
line-height: inherit;
}
input.tagit-hidden-field {
display: none;
}
ul.tagit li.tagit-choice-read-only {
padding: .2em .5em .2em .5em;
}
ul.tagit li.tagit-choice-editable {
padding: .2em 18px .2em .5em;
}
ul.tagit li.tagit-new {
padding: .25em 4px .25em 0;
}
ul.tagit li.tagit-choice a.tagit-label {
cursor: pointer;
text-decoration: none;
}
ul.tagit li.tagit-choice .tagit-close {
cursor: pointer;
position: absolute;
right: .1em;
top: 50%;
margin-top: -8px;
line-height: 17px;
}
/* used for some custom themes that don't need image icons */
ul.tagit li.tagit-choice .tagit-close .text-icon {
display: none;
}
ul.tagit li.tagit-choice input {
display: block;
float: left;
margin: 2px 5px 2px 0;
}
ul.tagit input[type="text"] {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
border: none;
margin: 0;
padding: 0;
width: inherit;
background-color: inherit;
outline: none;
}
/* Optional scoped theme for tag-it which mimics the zendesk widget. */
ul.tagit {
border-style: solid;
border-width: 1px;
border-color: #C6C6C6;
background: inherit;
}
ul.tagit li.tagit-choice {
-moz-border-radius: 6px;
border-radius: 6px;
-webkit-border-radius: 6px;
border: 1px solid #CAD8F3;
background: none;
background-color: #DEE7F8;
font-weight: normal;
}
ul.tagit li.tagit-choice .tagit-label:not(a) {
color: #555;
}
ul.tagit li.tagit-choice a.tagit-close {
text-decoration: none;
}
ul.tagit li.tagit-choice .tagit-close {
right: .4em;
}
ul.tagit li.tagit-choice .ui-icon {
display: none;
}
ul.tagit li.tagit-choice .tagit-close .text-icon {
display: inline;
font-family: arial, sans-serif;
font-size: 16px;
line-height: 16px;
color: #777;
}
ul.tagit li.tagit-choice:hover, ul.tagit li.tagit-choice.remove {
background-color: #bbcef1;
border-color: #6d95e0;
}
ul.tagit li.tagit-choice a.tagLabel:hover,
ul.tagit li.tagit-choice a.tagit-close .text-icon:hover {
color: #222;
}
ul.tagit input[type="text"] {
color: #333333;
background: none;
}
.ui-widget {
font-size: 1.1em;
}
/* Forked from a jQuery UI theme, so that we don't require the jQuery UI CSS as a dependency. */
.tagit-autocomplete.ui-autocomplete { position: absolute; cursor: default; }
* html .tagit-autocomplete.ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
.tagit-autocomplete.ui-menu {
list-style:none;
padding: 2px;
margin: 0;
display:block;
float: left;
}
.tagit-autocomplete.ui-menu .ui-menu {
margin-top: -3px;
}
.tagit-autocomplete.ui-menu .ui-menu-item {
margin:0;
padding: 0;
zoom: 1;
float: left;
clear: left;
width: 100%;
}
.tagit-autocomplete.ui-menu .ui-menu-item a {
text-decoration:none;
display:block;
padding:.2em .4em;
line-height:1.5;
zoom:1;
}
.tagit-autocomplete .ui-menu .ui-menu-item a.ui-state-hover,
.tagit-autocomplete .ui-menu .ui-menu-item a.ui-state-active {
font-weight: normal;
margin: -1px;
}
.tagit-autocomplete.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff 50% 50% repeat-x; color: #222222; }
.tagit-autocomplete.ui-corner-all, .tagit-autocomplete .ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; -khtml-border-radius: 4px; border-radius: 4px; }
.tagit-autocomplete .ui-state-hover, .tagit-autocomplete .ui-state-focus { border: 1px solid #999999; background: #dadada; font-weight: normal; color: #212121; }
.tagit-autocomplete .ui-state-active { border: 1px solid #aaaaaa; }
.tagit-autocomplete .ui-widget-content { border: 1px solid #aaaaaa; }
.tagit .ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px,1px,1px,1px); }
This diff is collapsed.
This diff is collapsed.
(function(b){b.widget("ui.tagit",{options:{allowDuplicates:!1,caseSensitive:!0,fieldName:"tags",placeholderText:null,readOnly:!1,removeConfirmation:!1,tagLimit:null,availableTags:[],autocomplete:{},showAutocompleteOnFocus:!1,allowSpaces:!1,singleField:!1,singleFieldDelimiter:",",singleFieldNode:null,animate:!0,tabIndex:null,beforeTagAdded:null,afterTagAdded:null,beforeTagRemoved:null,afterTagRemoved:null,onTagClicked:null,onTagLimitExceeded:null,onTagAdded:null,onTagRemoved:null,tagSource:null},_create:function(){var a=
this;this.element.is("input")?(this.tagList=b("<ul></ul>").insertAfter(this.element),this.options.singleField=!0,this.options.singleFieldNode=this.element,this.element.addClass("tagit-hidden-field")):this.tagList=this.element.find("ul, ol").andSelf().last();this.tagInput=b('<input type="text" />').addClass("ui-widget-content");this.options.readOnly&&this.tagInput.attr("disabled","disabled");this.options.tabIndex&&this.tagInput.attr("tabindex",this.options.tabIndex);this.options.placeholderText&&this.tagInput.attr("placeholder",
this.options.placeholderText);this.options.autocomplete.source||(this.options.autocomplete.source=function(a,e){var d=a.term.toLowerCase(),c=b.grep(this.options.availableTags,function(a){return 0===a.toLowerCase().indexOf(d)});this.options.allowDuplicates||(c=this._subtractArray(c,this.assignedTags()));e(c)});this.options.showAutocompleteOnFocus&&(this.tagInput.focus(function(b,d){a._showAutocomplete()}),"undefined"===typeof this.options.autocomplete.minLength&&(this.options.autocomplete.minLength=
0));b.isFunction(this.options.autocomplete.source)&&(this.options.autocomplete.source=b.proxy(this.options.autocomplete.source,this));b.isFunction(this.options.tagSource)&&(this.options.tagSource=b.proxy(this.options.tagSource,this));this.tagList.addClass("tagit").addClass("ui-widget ui-widget-content ui-corner-all").append(b('<li class="tagit-new"></li>').append(this.tagInput)).click(function(d){var c=b(d.target);c.hasClass("tagit-label")?(c=c.closest(".tagit-choice"),c.hasClass("removed")||a._trigger("onTagClicked",
d,{tag:c,tagLabel:a.tagLabel(c)})):a.tagInput.focus()});var c=!1;if(this.options.singleField)if(this.options.singleFieldNode){var d=b(this.options.singleFieldNode),f=d.val().split(this.options.singleFieldDelimiter);d.val("");b.each(f,function(b,d){a.createTag(d,null,!0);c=!0})}else this.options.singleFieldNode=b('<input type="hidden" style="display:none;" value="" name="'+this.options.fieldName+'" />'),this.tagList.after(this.options.singleFieldNode);c||this.tagList.children("li").each(function(){b(this).hasClass("tagit-new")||
(a.createTag(b(this).text(),b(this).attr("class"),!0),b(this).remove())});this.tagInput.keydown(function(c){if(c.which==b.ui.keyCode.BACKSPACE&&""===a.tagInput.val()){var d=a._lastTag();!a.options.removeConfirmation||d.hasClass("remove")?a.removeTag(d):a.options.removeConfirmation&&d.addClass("remove ui-state-highlight")}else a.options.removeConfirmation&&a._lastTag().removeClass("remove ui-state-highlight");if(/*c.which===b.ui.keyCode.COMMA&&!1===c.shiftKey||*/c.which===b.ui.keyCode.ENTER||c.which==
b.ui.keyCode.TAB&&""!==a.tagInput.val()||c.which==b.ui.keyCode.SPACE&&!0!==a.options.allowSpaces&&('"'!=b.trim(a.tagInput.val()).replace(/^s*/,"").charAt(0)||'"'==b.trim(a.tagInput.val()).charAt(0)&&'"'==b.trim(a.tagInput.val()).charAt(b.trim(a.tagInput.val()).length-1)&&0!==b.trim(a.tagInput.val()).length-1))c.which===b.ui.keyCode.ENTER&&""===a.tagInput.val()||c.preventDefault(),a.options.autocomplete.autoFocus&&a.tagInput.data("autocomplete-open")||(a.tagInput.autocomplete("close"),a.createTag(a._cleanedInput()))}).blur(function(b){a.tagInput.data("autocomplete-open")||
a.createTag(a._cleanedInput())});if(this.options.availableTags||this.options.tagSource||this.options.autocomplete.source)d={select:function(b,c){a.createTag(c.item.value);return!1}},b.extend(d,this.options.autocomplete),d.source=this.options.tagSource||d.source,this.tagInput.autocomplete(d).bind("autocompleteopen.tagit",function(b,c){a.tagInput.data("autocomplete-open",!0)}).bind("autocompleteclose.tagit",function(b,c){a.tagInput.data("autocomplete-open",!1)}),this.tagInput.autocomplete("widget").addClass("tagit-autocomplete")},
destroy:function(){b.Widget.prototype.destroy.call(this);this.element.unbind(".tagit");this.tagList.unbind(".tagit");this.tagInput.removeData("autocomplete-open");this.tagList.removeClass("tagit ui-widget ui-widget-content ui-corner-all tagit-hidden-field");this.element.is("input")?(this.element.removeClass("tagit-hidden-field"),this.tagList.remove()):(this.element.children("li").each(function(){b(this).hasClass("tagit-new")?b(this).remove():(b(this).removeClass("tagit-choice ui-widget-content ui-state-default ui-state-highlight ui-corner-all remove tagit-choice-editable tagit-choice-read-only"),
b(this).text(b(this).children(".tagit-label").text()))}),this.singleFieldNode&&this.singleFieldNode.remove());return this},_cleanedInput:function(){return b.trim(this.tagInput.val().replace(/^"(.*)"$/,"$1"))},_lastTag:function(){return this.tagList.find(".tagit-choice:last:not(.removed)")},_tags:function(){return this.tagList.find(".tagit-choice:not(.removed)")},assignedTags:function(){var a=this,c=[];this.options.singleField?(c=b(this.options.singleFieldNode).val().split(this.options.singleFieldDelimiter),
""===c[0]&&(c=[])):this._tags().each(function(){c.push(a.tagLabel(this))});return c},_updateSingleTagsField:function(a){b(this.options.singleFieldNode).val(a.join(this.options.singleFieldDelimiter)).trigger("change")},_subtractArray:function(a,c){for(var d=[],f=0;f<a.length;f++)-1==b.inArray(a[f],c)&&d.push(a[f]);return d},tagLabel:function(a){return this.options.singleField?b(a).find(".tagit-label:first").text():b(a).find("input:first").val()},_showAutocomplete:function(){this.tagInput.autocomplete("search",
"")},_findTagByLabel:function(a){var c=this,d=null;this._tags().each(function(f){if(c._formatStr(a)==c._formatStr(c.tagLabel(this)))return d=b(this),!1});return d},_isNew:function(a){return!this._findTagByLabel(a)},_formatStr:function(a){return this.options.caseSensitive?a:b.trim(a.toLowerCase())},_effectExists:function(a){return Boolean(b.effects&&(b.effects[a]||b.effects.effect&&b.effects.effect[a]))},createTag:function(a,c,d){var f=this;a=b.trim(a);this.options.preprocessTag&&(a=this.options.preprocessTag(a));
if(""===a)return!1;if(!this.options.allowDuplicates&&!this._isNew(a))return a=this._findTagByLabel(a),!1!==this._trigger("onTagExists",null,{existingTag:a,duringInitialization:d})&&this._effectExists("highlight")&&a.effect("highlight"),!1;if(this.options.tagLimit&&this._tags().length>=this.options.tagLimit)return this._trigger("onTagLimitExceeded",null,{duringInitialization:d}),!1;var g=b(this.options.onTagClicked?'<a class="tagit-label"></a>':'<span class="tagit-label"></span>').text(a),e=b("<li></li>").addClass("tagit-choice ui-widget-content ui-state-default ui-corner-all").addClass(c).append(g);
this.options.readOnly?e.addClass("tagit-choice-read-only"):(e.addClass("tagit-choice-editable"),c=b("<span></span>").addClass("ui-icon ui-icon-close"),c=b('<a><span class="text-icon">\u00d7</span></a>').addClass("tagit-close").append(c).click(function(a){f.removeTag(e)}),e.append(c));this.options.singleField||(g=g.html(),e.append('<input type="hidden" value="'+g+'" name="'+this.options.fieldName+'" class="tagit-hidden-field" />'));!1!==this._trigger("beforeTagAdded",null,{tag:e,tagLabel:this.tagLabel(e),
duringInitialization:d})&&(this.options.singleField&&(g=this.assignedTags(),g.push(a),this._updateSingleTagsField(g)),this._trigger("onTagAdded",null,e),this.tagInput.val(""),this.tagInput.parent().before(e),this._trigger("afterTagAdded",null,{tag:e,tagLabel:this.tagLabel(e),duringInitialization:d}),this.options.showAutocompleteOnFocus&&!d&&setTimeout(function(){f._showAutocomplete()},0))},removeTag:function(a,c){c="undefined"===typeof c?this.options.animate:c;a=b(a);this._trigger("onTagRemoved",
null,a);if(!1!==this._trigger("beforeTagRemoved",null,{tag:a,tagLabel:this.tagLabel(a)})){if(this.options.singleField){var d=this.assignedTags(),f=this.tagLabel(a),d=b.grep(d,function(a){return a!=f});this._updateSingleTagsField(d)}if(c){a.addClass("removed");var d=this._effectExists("blind")?["blind",{direction:"horizontal"},"fast"]:["fast"],g=this;d.push(function(){a.remove();g._trigger("afterTagRemoved",null,{tag:a,tagLabel:g.tagLabel(a)})});a.fadeOut("fast").hide.apply(a,d).dequeue()}else a.remove(),
this._trigger("afterTagRemoved",null,{tag:a,tagLabel:this.tagLabel(a)})}},removeTagByLabel:function(a,b){var d=this._findTagByLabel(a);if(!d)throw"No such tag exists with the name '"+a+"'";this.removeTag(d,b)},removeAll:function(){var a=this;this._tags().each(function(b,d){a.removeTag(d,!1)})}})})(jQuery);
$("#myTags").tagit({
// Options
fieldName: "skills",
availableTags: ["c++", "java", "php", "javascript", "ruby", "python", "c"],
autocomplete: {delay: 0, minLength: 2},
showAutocompleteOnFocus: false,
removeConfirmation: false,
caseSensitive: true,
allowDuplicates: false,
allowSpaces: false,
readOnly: false,
tagLimit: null,
singleField: false,
singleFieldDelimiter: ',',
singleFieldNode: null,
tabIndex: null,
placeholderText: null,
// Events
beforeTagAdded: function(event, ui) {
console.log(ui.tag);
},
afterTagAdded: function(event, ui) {
console.log(ui.tag);
},
beforeTagRemoved: function(event, ui) {
console.log(ui.tag);
},
onTagExists: function(event, ui) {
console.log(ui.tag);
},
onTagClicked: function(event, ui) {
console.log(ui.tag);
},
onTagLimitExceeded: function(event, ui) {
console.log(ui.tag);
}
});
\ No newline at end of file
Path = require('path')
fs = require('fs')
ThemeUtils = require('./docs/lib/themes.coffee')
themeColors =
black: '#000000'
white: '#ffffff'
silver: '#d6d6d6'
red: '#ee3148'
orange: '#eb7a55'
yellow: '#fcd25a'
green: '#22df80'
blue: '#2299dd'
pink: '#e90f92'
purple: '#7c60e0'
module.exports = (grunt) ->
grunt.registerTask 'themes', 'Compile the pace theme files', ->
done = @async()
options = grunt.config('themes')
grunt.file.glob options.src, (err, files) ->
for colorName, color of themeColors
for file in files
body = ThemeUtils.compileTheme fs.readFileSync(file).toString(), {color}
body = "/* This is a compiled file, you should be editing the file in the templates directory */\n" + body
name = Path.basename file
name = name.replace '.tmpl', ''
path = Path.join options.dest, colorName, name
fs.writeFileSync path, body
done()
grunt.initConfig
pkg: grunt.file.readJSON("package.json")
coffee:
compile:
files:
'pace.js': 'pace.coffee'
'docs/lib/themes.js': 'docs/lib/themes.coffee'
watch:
coffee:
files: ['pace.coffee', 'docs/lib/themes.coffee', 'templates/*']
tasks: ["coffee", "uglify", "themes"]
uglify:
options:
banner: "/*! <%= pkg.name %> <%= pkg.version %> */\n"
dist:
src: 'pace.js'
dest: 'pace.min.js'
themes:
src: 'templates/*.tmpl.css'
dest: 'themes'
grunt.loadNpmTasks 'grunt-contrib-watch'
grunt.loadNpmTasks 'grunt-contrib-uglify'
grunt.loadNpmTasks 'grunt-contrib-coffee'
grunt.registerTask 'default', ['coffee', 'uglify', 'themes']
Copyright (c) 2013 HubSpot, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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