diff --git a/application/modules/default/controllers/UserController.php b/application/modules/default/controllers/UserController.php index 742b6c9f1..ff1102893 100644 --- a/application/modules/default/controllers/UserController.php +++ b/application/modules/default/controllers/UserController.php @@ -1,822 +1,825 @@ . **/ class UserController extends Local_Controller_Action_DomainSwitch { protected $_memberId; protected $_userName; /** @var Zend_Db_Table_Row */ protected $_memberSettings; public function init() { parent::init(); if ($this->hasParam('user_name')) { $this->_userName = $this->getParam('user_name'); $this->_userName = urldecode($this->_userName); $modelMember = new Default_Model_Member(); $this->_memberId = $modelMember->fetchActiveUserByUsername($this->_userName); } else { $this->_memberId = (int)$this->getParam('member_id'); } } public function indexAction() { $this->_helper->viewRenderer('aboutme'); $this->aboutmeAction(); } public function aboutmeAction() { $tableMember = new Default_Model_Member(); $tableProject = new Default_Model_Project(); $earnModel = new Default_Model_StatDownload(); $helperUserRole = new Backend_View_Helper_UserRole(); $pageLimit = 500; $projectpage = (int)$this->getParam('projectpage', 1); $this->view->authMember = $this->_authMember; $this->view->member = $tableMember->fetchMemberData($this->_memberId); $this->view->headTitle($this->view->member->username . ' - ' . $this->getHeadTitle(), 'SET'); if (null == $this->view->member) { $this->redirect("/"); } if ($this->view->member->is_deleted == 1 or $this->view->member->is_active == 0) { $this->redirect("/"); } $this->view->mainProject = $this->view->member->findDependentRowset($tableProject, 'MainProject')->current(); $this->view->userProjectCategories = $tableProject->getUserCreatingCategorys($this->_memberId); $this->view->aboutmeUserInfo = $this->getAboutmeUserInfo($this->_memberId,$this->view->member->username); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $datetime = new DateTime(); $datetime->sub(new DateInterval('P1M')); $month = $datetime->format('Ym'); $amount = $earnModel->getMonthEarn($this->_memberId,$month); if($amount && $amount['amount']) { $this->view->earnInfo = ' Last month I earned $'.number_format($amount['amount'], 2, '.', '').'.'; }else { $this->view->earnInfo=' Last month I earned 0.'; } }else{ $this->view->earnInfo=''; } // ajax load more products if ($this->getParam('projectpage', null)) { $total_records = $tableProject->countAllProjectsForMemberCatFilter($this->_memberId, true, null); $this->view->pageLimit = $pageLimit; $this->view->projectpage = $projectpage; $this->view->total_records = $total_records; // get last project category id $lastproject = $tableProject->getUserActiveProjects($this->_memberId, 1, (($projectpage - 1) * $pageLimit-1)); foreach ($lastproject as $value) { $this->view->lastcatid = $value['project_category_id']; } $this->view->userProducts = $tableProject->getUserActiveProjects($this->_memberId, $pageLimit, ($projectpage - 1) * $pageLimit); $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer('partials/aboutmeProducts'); //$this->forward('showmoreproductsajax', 'user', null, $this->getAllParams()); return; } else { $total_records = $tableProject->countAllProjectsForMemberCatFilter($this->_memberId, true, null); $this->view->pageLimit = $pageLimit; $this->view->projectpage = $projectpage; $this->view->total_records = $total_records; //$this->view->userProducts = $tableProject->fetchAllProjectsForMember($this->_memberId, $pageLimit, ($projectpage - 1) * $pageLimit,true); $this->view->userProducts = $tableProject->getUserActiveProjects($this->_memberId, $pageLimit, ($projectpage - 1) * $pageLimit); $this->view->userFeaturedProducts = $tableProject->fetchAllFeaturedProjectsForMember($this->_memberId); $paginationComments = $tableMember->fetchComments($this->_memberId); if ($paginationComments) { $offset = (int)$this->getParam('page'); $paginationComments->setItemCountPerPage(50); $paginationComments->setCurrentPageNumber($offset); $this->view->comments = $paginationComments; } // favs Currently no paging... $this->view->paramLikePageId = (int)$this->getParam('likepage'); $model = new Default_Model_DbTable_ProjectFollower(); $offset = $this->view->paramLikePageId; $list = $model->fetchLikesForMember($this->_memberId); $list->setItemCountPerPage(1000); $list->setCurrentPageNumber($offset); $this->view->likes = $list; // plings Currently no paging... $plingmodel = new Default_Model_ProjectPlings(); $offset = null; $plist = $plingmodel->fetchPlingsForMember($this->_memberId); $plist->setItemCountPerPage(1000); $plist->setCurrentPageNumber($offset); $this->view->plings = $plist; // plings Currently no paging... $plingmodel = new Default_Model_ProjectPlings(); $offset = null; $pslist = $plingmodel->fetchPlingsForSupporter($this->_memberId); $pslist->setItemCountPerPage(1000); $pslist->setCurrentPageNumber($offset); $this->view->supportersplings = $pslist; // rated $ratemodel = new Default_Model_DbTable_ProjectRating(); $this->view->rated = $ratemodel->getRatedForMember($this->_memberId); $stat = array(); $stat['cntProducts'] = $total_records; if ($this->view->userFeaturedProducts) { $cnt = 0; foreach ($this->view->userFeaturedProducts as $tmp) { $cnt++; } $stat['cntFProducts'] = $cnt; } else { $stat['cntFProducts'] = 0; } $stat['cntComments'] = $paginationComments->getTotalItemCount(); $tblFollower = new Default_Model_DbTable_ProjectFollower(); $stat['cntLikesHeGave'] = $tblFollower->countLikesHeGave($this->_memberId); $stat['cntLikesHeGot'] = $tblFollower->countLikesHeGot($this->_memberId); $tblPling = new Default_Model_DbTable_ProjectPlings(); $stat['cntPlingsHeGave'] = $tblPling->countPlingsHeGave($this->_memberId); $stat['cntPlingsHeGot'] = $tblPling->countPlingsHeGot($this->_memberId); $donationinfo = $tableMember->fetchSupporterDonationInfo($this->_memberId); if ($donationinfo) { $stat['donationIssupporter'] = $donationinfo['issupporter']; $stat['donationMax'] = $donationinfo['active_time_max']; $stat['donationMin'] = $donationinfo['active_time_min']; $stat['donationCnt'] = $donationinfo['cnt']; } // $cntmb = $tableMember->fetchCntSupporters($this->_memberId); // $stat['cntSupporters'] = $cntmb; $stat['userLastActiveTime'] = $tableMember->fetchLastActiveTime($this->_memberId); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $stat['cntDuplicateSourceurl'] = $tableProject->getCountProjectsDuplicateSourceurl($this->_memberId); } $this->view->stat = $stat; } } public function getAboutmeUserInfo($member_id,$username) { $tableProject = new Default_Model_Project(); $userProjectCategories = $tableProject->getUserCreatingCategorys($member_id); $cnt = sizeof($userProjectCategories ); $userinfo=''; $isAdmin = false; $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName){ $isAdmin= true; } if($cnt>0) { $userinfo = "Hi, I am ".$username." and I create "; if($cnt==1) { $userinfo = $userinfo.' '.$userProjectCategories[0]['category1'].''; - if($isAdmin) + $userinfo = $userinfo.'.'; + /* if($isAdmin) { $userinfo = $userinfo.' ('.$userProjectCategories[0]['cnt'].').'; }else{ $userinfo = $userinfo.'.'; - } + }*/ }else if($cnt==2) { $userinfo = $userinfo.' '.$userProjectCategories[0]['category1'].''; - if($isAdmin) + /*if($isAdmin) { $userinfo = $userinfo.' ('.$userProjectCategories[0]['cnt'].')'; - } + }*/ $userinfo = $userinfo.' and '.$userProjectCategories[1]['category1'].''; - if($isAdmin) + /*if($isAdmin) { $userinfo = $userinfo.'('.$userProjectCategories[1]['cnt'].').'; }else{ $userinfo = $userinfo.'.'; - } + }*/ + $userinfo = $userinfo.'.'; }else if($cnt==3) { $userinfo = $userinfo.' '.$userProjectCategories[0]['category1'].''; - if($isAdmin) + /*if($isAdmin) { $userinfo = $userinfo.' ('.$userProjectCategories[0]['cnt'].')'; - } + }*/ $userinfo = $userinfo.', '.$userProjectCategories[1]['category1'].''; - if($isAdmin) + /* if($isAdmin) { $userinfo = $userinfo.' ('.$userProjectCategories[1]['cnt'].')'; - } + }*/ $userinfo = $userinfo.' and '.$userProjectCategories[2]['category1'].''; - if($isAdmin) + /*if($isAdmin) { $userinfo = $userinfo.' ('.$userProjectCategories[2]['cnt'].').'; - } - else{ + }*/ + /*else{ $userinfo = $userinfo.'.'; - } + }*/ + $userinfo = $userinfo.'.'; }else if($cnt>3) { $userinfo = $userinfo.' '.$userProjectCategories[0]['category1'].''; - if($isAdmin) + /*if($isAdmin) { $userinfo = $userinfo.' ('.$userProjectCategories[0]['cnt'].')'; - } + }*/ $userinfo = $userinfo.', '.$userProjectCategories[1]['category1'].''; - if($isAdmin) + /*if($isAdmin) { $userinfo = $userinfo.' ('.$userProjectCategories[1]['cnt'].')'; - } + }*/ $userinfo = $userinfo.', '.$userProjectCategories[2]['category1'].''; - if($isAdmin) + /*if($isAdmin) { $userinfo = $userinfo.' ('.$userProjectCategories[2]['cnt'].')'; - } + }*/ $userinfo = $userinfo.' and more.'; } } return $userinfo; } public function avatarAction() { $this->_helper->layout->disableLayout(); $size = (int)$this->getParam("size", 200); $width = (int)$this->getParam("width", ($size / 2)); $this->view->size = (int)$size / 2; $emailHash = $this->getParam("emailhash", null); if ($emailHash) { $memberTable = new Default_Model_Member(); $member = $memberTable->findMemberForMailHash($emailHash); if ($member) { $helperImage = new Default_View_Helper_Image(); $imgUrl = $helperImage->Image($member['profile_image_url'], array('width' => $width, 'height' => $width)); $this->view->avatar = $imgUrl; $this->redirect($imgUrl); return; } } $this->view->avatar = ""; $helperImage = new Default_View_Helper_Image(); $imgUrl = $helperImage->Image("default-profile.png", array('width' => $width, 'height' => $width)); $this->redirect($imgUrl); } public function aboutAction() { $modelMember = new Default_Model_Member(); $this->view->member = $modelMember->fetchMember($this->_memberId)->toArray(); $this->view->currentPageOffset = (int)$this->getParam('page'); } public function showmoreproductsajaxAction() { $this->_helper->layout->disableLayout(); $tableProject = new Default_Model_Project(); $pageLimit = 21; $page = (int)$this->getParam('page', 1); $total_records = $tableProject->countAllProjectsForMemberCatFilter($this->_memberId, true, null); $this->view->pageLimit = $pageLimit; $this->view->page = $page; $this->view->total_records = $total_records; $this->view->userProducts = $tableProject->fetchAllProjectsForMember($this->_memberId, $pageLimit, ($page - 1) * $pageLimit, true); $this->_helper->viewRenderer('/partials/aboutmeProducts'); } public function userdataajaxAction() { $this->_helper->layout()->disableLayout(); $this->_helper->viewRenderer->setNoRender(true); $resultArray = array(); header('Access-Control-Allow-Origin: *'); $this->getResponse()->setHeader('Access-Control-Allow-Origin', '*')->setHeader('Access-Control-Allow-Credentials', 'true') ->setHeader('Access-Control-Allow-Methods', 'POST, GET, OPTIONS') ->setHeader('Access-Control-Allow-Headers', 'origin, content-type, accept') ; $userid = $this->getParam('id'); $modelMember = new Default_Model_Member(); $user = $modelMember->find($userid)->current(); if (Zend_Auth::getInstance()->hasIdentity()) { $auth = Zend_Auth::getInstance(); $user = $auth->getStorage()->read(); $resultArray['member_id'] = $user->member_id; $resultArray['username'] = $user->username; $resultArray['mail'] = $user->mail; $resultArray['avatar'] = $user->profile_image_url; } else if (null != $userid && null != $user) { $resultArray['member_id'] = $user['member_id']; $resultArray['username'] = $user['username']; $resultArray['mail'] = $user['mail']; $resultArray['avatar'] = $user['profile_image_url']; } else { $resultArray['member_id'] = null; $resultArray['username'] = null; $resultArray['mail'] = null; $resultArray['avatar'] = null; } $resultAll = array(); $resultAll['status'] = "success"; $resultAll['data'] = $resultArray; $this->_helper->json($resultAll); } public function followsAction() { $this->redirect($this->_helper->url('follows', 'member', null, $this->getAllParams())); } public function followAction() { $this->_helper->layout->disableLayout(); $this->view->authMember = $this->_authMember; $this->view->member_id = $this->_memberId; if ($this->_memberId == $this->_authMember->member_id) { return; } $memberFollowTable = new Default_Model_DbTable_MemberFollower(); $newVals = array('member_id' => $this->_memberId, 'follower_id' => (int)$this->_authMember->member_id); $where = $memberFollowTable->select()->where('member_id = ?', $this->_memberId) ->where('follower_id = ?', $this->_authMember->member_id, 'INTEGER') ; $result = $memberFollowTable->fetchRow($where); if (null === $result) { $memberFollowTable->createRow($newVals)->save(); } } public function unfollowAction() { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer('follow'); $memberFollowTable = new Default_Model_DbTable_MemberFollower(); $memberFollowTable->delete('member_id=' . $this->_memberId . ' AND follower_id=' . $this->_authMember->member_id); $this->view->authMember = $this->_authMember; $this->view->member_id = $this->_memberId; } public function newsAction() { $this->productsAction(); $this->render('products'); } public function productsAction() { $pageLimit = 25; $page = (int)$this->getParam('page', 1); //create ppload download hash: secret + collection_id + expire-timestamp $salt = PPLOAD_DOWNLOAD_SECRET; $timestamp = time() + 3600; // one hour valid $hash = md5($salt . $timestamp); // order isn't important at all... just do the same when verifying $this->view->download_hash = $hash; $this->view->download_timestamp = $timestamp; $this->view->member_id = null; if (null != $this->_authMember && null != $this->_authMember->member_id) { $this->view->member_id = $this->_authMember->member_id; } $modelProject = new Default_Model_Project(); $userProjects = $modelProject->fetchAllProjectsForMember($this->_authMember->member_id, $pageLimit, ($page - 1) * $pageLimit); $paginator = Local_Paginator::factory($userProjects); $paginator->setItemCountPerPage($pageLimit); $paginator->setCurrentPageNumber($page); $paginator->setTotalItemCount($modelProject->countAllProjectsForMember($this->_authMember->member_id)); $this->view->products = $paginator; $modelMember = new Default_Model_Member(); $this->view->member = $modelMember->fetchMemberData($this->_authMember->member_id); } public function activitiesAction() { $modelInfo = new Default_Model_Info(); $this->view->member = $this->_authMember; $this->view->comments = $modelInfo->getLastCommentsForUsersProjects($this->_authMember->member_id); $this->view->votes = $modelInfo->getLastVotesForUsersProjects($this->_authMember->member_id); $this->view->donations = $modelInfo->getLastDonationsForUsersProjects($this->_authMember->member_id); } public function settingsAction() { $this->_helper->layout()->setLayout('settings'); } public function reportAction() { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer('product/add'); $this->forward('report', 'product', null, $this->getAllParams()); } public function paymentsAction() { $this->view->headScript()->setFile(''); $this->view->headLink()->setStylesheet(''); $member_id = $this->_authMember->member_id; $this->view->member = $this->_authMember; $tableMember = new Default_Model_Member(); $this->view->hits = $tableMember->fetchPlingedProjects($member_id); } public function incomeAction() { $this->view->member = $this->_authMember; $tableMember = new Default_Model_Member(); $modelPlings = new Default_Model_Pling(); $this->view->donations = $modelPlings->fetchRecentDonationsForUser($this->_authMember->member_id); } public function tooltipAction() { $this->_helper->layout->disableLayout(); $info = new Default_Model_Info(); $data = $info->getTooptipForMember($this->_memberId); $this->_helper->json(array('status' => 'ok', 'data' => $data)); } public function shareAction() { $this->_helper->layout->disableLayout(); $modelProduct = new Default_Model_Member(); $memberInfo = $modelProduct->fetchMemberData($this->_memberId); $form = new Default_Form_ProjectShare(); $form->setAction('/member/' . $this->_memberId . '/share/'); // $helperBaseUrl = new Default_View_Helper_BaseUrl(); // $helperServerUrl = new Zend_View_Helper_ServerUrl(); $helpMemberUrl = new Default_View_Helper_BuildMemberUrl(); $this->view->permaLink = $helpMemberUrl->buildMemberUrl($memberInfo->username); // $this->view->permaLink = $helperServerUrl->serverUrl() . $helperBaseUrl->baseUrl() . '/member/' . $this->_memberId . '/'; if ($this->_request->isGet()) { $this->view->form = $form; $this->renderScript('product/share.phtml'); return; } if (false === $form->isValid($_POST)) { // form not valid $this->view->form = $form; $dummy = $this->view->render('product/share.phtml'); $this->_helper->json(array('status' => 'ok', 'message' => $dummy)); return; } $values = $form->getValues(); if (empty($memberInfo->firstname) and empty($memberInfo->lastname)) { $username = $memberInfo->username; } else { $username = $memberInfo->firstname . ' ' . $memberInfo->lastname; } $shareMail = new Default_Plugin_SendMail('tpl_social_mail_user'); $shareMail->setTemplateVar('sender', $values['sender_mail']); $shareMail->setTemplateVar('username', $username); $shareMail->setTemplateVar('permalink', $this->view->permaLink); $shareMail->setTemplateVar('permalinktext', 'View user\'s page'); $shareMail->setReceiverMail($values['mail']); $shareMail->send(); $this->_helper->json(array('status' => 'ok', 'redirect' => $this->view->permaLink)); } public function plingsAction() { $tableMember = new Default_Model_Member(); $this->view->view_member = $tableMember->fetchMemberData($this->_memberId); $paypalValidStatusTable = new Default_Model_DbTable_PaypalValidStatus(); $paypalValidStatus = $paypalValidStatusTable->find($this->view->view_member->paypal_valid_status)->current(); $this->view->paypal_valid_status = $paypalValidStatus; //backdoor for admins $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $this->view->member = $this->view->view_member; } else { $this->view->member = $this->_authMember; } } public function plingsoldAction() { $tableMember = new Default_Model_Member(); $this->view->view_member = $tableMember->fetchMemberData($this->_memberId); $paypalValidStatusTable = new Default_Model_DbTable_PaypalValidStatus(); $paypalValidStatus = $paypalValidStatusTable->find($this->view->view_member->paypal_valid_status)->current(); $this->view->paypal_valid_status = $paypalValidStatus; //backdoor for admins $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $this->view->member = $this->view->view_member; } else { $this->view->member = $this->_authMember; } } public function plingsajaxAction() { $this->_helper->layout->disableLayout(); $tableMember = new Default_Model_Member(); $this->view->view_member = $tableMember->fetchMemberData($this->_memberId); $paypalValidStatusTable = new Default_Model_DbTable_PaypalValidStatus(); $paypalValidStatus = $paypalValidStatusTable->find($this->view->view_member->paypal_valid_status)->current(); $this->view->paypal_valid_status = $paypalValidStatus; //backdoor for admins $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $this->view->member = $this->view->view_member; } else { $this->view->member = $this->_authMember; } $year = null; if($this->hasParam('year')) { $year = $this->getParam('year'); } $this->view->year = $year; $this->_helper->viewRenderer('/plingsajax'); } public function plingsmonthajaxAction() { $this->_helper->layout->disableLayout(); $tableMember = new Default_Model_Member(); $this->view->view_member = $tableMember->fetchMemberData($this->_memberId); $paypalValidStatusTable = new Default_Model_DbTable_PaypalValidStatus(); $paypalValidStatus = $paypalValidStatusTable->find($this->view->view_member->paypal_valid_status)->current(); $this->view->paypal_valid_status = $paypalValidStatus; //backdoor for admins $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $this->view->member = $this->view->view_member; } else { $this->view->member = $this->_authMember; } $yearmonth = null; if($this->hasParam('yearmonth')) { $yearmonth = $this->getParam('yearmonth'); } $this->view->yearmonth = $yearmonth; $this->_helper->viewRenderer('/plingsmonthajax'); } public function downloadhistoryAction() { $tableMember = new Default_Model_Member(); $this->view->view_member = $tableMember->fetchMemberData($this->_memberId); //backdore for admins $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $this->view->member = $this->view->view_member; } else { $this->view->member = $this->_authMember; } if ($this->view->member) { $this->view->paramPageId = (int)$this->getParam('page'); //TODO do really sql paging instead of Zend_Paginator $dhistory = new Default_Model_DbTable_MemberDownloadHistory(); $offset = $this->view->paramPageId; $list = $dhistory->getDownloadhistory($this->view->member->member_id); $list->setItemCountPerPage(250); $list->setCurrentPageNumber($offset); $this->view->downloadhistory = $list; } else { $this->view->downloadhistory = array(); } } public function likesAction() { $tableMember = new Default_Model_Member(); $this->view->view_member = $tableMember->fetchMemberData($this->_memberId); //backdore for admins $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $this->view->member = $this->view->view_member; } else { $this->view->member = $this->_authMember; } if ($this->view->member) { $this->view->paramPageId = (int)$this->getParam('page'); $model = new Default_Model_DbTable_ProjectFollower(); $offset = $this->view->paramPageId; $list = $model->fetchLikesForMember($this->view->member->member_id); $list->setItemCountPerPage(250); $list->setCurrentPageNumber($offset); $this->view->likes = $list; } else { $this->view->likes = array(); } } public function payoutAction() { $tableMember = new Default_Model_Member(); $this->view->view_member = $tableMember->fetchMemberData($this->_memberId); //backdore for admins $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $this->view->member = $this->view->view_member; } else { $this->view->member = $this->_authMember; } } /** * @return Default_Form_Settings * @throws Zend_Form_Exception */ private function formPassword() { $form = new Default_Form_Settings(); $form->setMethod("POST")->setAttrib("id", "settingsPasswordForm")->setAction('/member/' . $this->_memberId . '/changepass'); $passOld = $form->createElement('password', 'passwordOld')->setLabel('Enter old Password:')->setRequired(true) ->removeDecorator('HtmlTag')->addValidator(new Local_Validate_OldPasswordConfirm())->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) )) ; $pass1 = $form->createElement('password', 'password1')->setLabel('Enter new Password:')->setRequired(true) ->addValidator(new Zend_Validate_NotEmpty(Zend_Validate_NotEmpty::STRING))->removeDecorator('HtmlTag') ->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) )) ; $pass2 = $form->createElement('password', 'password2')->setLabel('Re-enter new Password:')->setRequired(true) ->addValidator(new Zend_Validate_NotEmpty(Zend_Validate_NotEmpty::STRING))->removeDecorator('HtmlTag') ->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) )) ; $passValid = new Local_Validate_PasswordConfirm($pass2->getValue()); $pass1->addValidator($passValid); $form->addElement($passOld)->addElement($pass1)->addElement($pass2); return $form; } private function fetchMemberId() { if (false === Zend_Auth::getInstance()->hasIdentity()) { return null; } $auth = Zend_Auth::getInstance()->getIdentity(); if ($this->_userName == $auth->username) { return $auth->member_id; } if (Default_Model_DbTable_Member::ROLE_ID_ADMIN == $auth->roleId) { return $this->_memberId; } } } \ No newline at end of file diff --git a/application/modules/default/views/scripts/home/index-opendesktop-test4.phtml b/application/modules/default/views/scripts/home/index-opendesktop-test4.phtml index 36c7ff590..2d9be6456 100755 --- a/application/modules/default/views/scripts/home/index-opendesktop-test4.phtml +++ b/application/modules/default/views/scripts/home/index-opendesktop-test4.phtml @@ -1,59 +1,68 @@ . **/ $this->headTitle($_SERVER['HTTP_HOST'], 'SET'); $this->doctype(Zend_View_Helper_Doctype::XHTML1_RDFA); $this->headMeta()->appendProperty('og:url', 'www.opendesktop.org'); $this->headMeta()->appendProperty('og:type', 'website'); $this->headMeta()->appendProperty('og:title', 'opendesktop.org'); $this->headMeta()->appendProperty('og:site_name','www.opendesktop.org'); $this->headMeta()->appendProperty('og:description','A community where developers and artists share applications, themes and other content'); $this->headMeta()->appendProperty('og:image','https://www.opendesktop.org/images/system/opendesktop-logo.png'); $modelInfo = new Default_Model_Info(); -$productsThemesPlasma = $modelInfo->getLastProductsForHostStores(5,33); -foreach ($productsThemesPlasma as &$p) { +// $productsAppAddons = $modelInfo->getLastProductsForHostStores(5,'152,233'); +// $productsThemes = $modelInfo->getLastProductsForHostStores(5,'158,509,330,404,148,491,445,295'); +$productsAppAddons = $modelInfo->getLastProductsForHostStores(5,'33,233'); +$productsThemes = $modelInfo->getLastProductsForHostStores(5,'33,295'); +foreach ($productsAppAddons as &$p) { + $p['image_small'] = $this->Image($p['image_small'], array('width' => 200, 'height' => 200)); +} +foreach ($productsThemes as &$p) { $p['image_small'] = $this->Image($p['image_small'], array('width' => 200, 'height' => 200)); } /*'products' => array('title' =>'KDE Plasma','catIds' =>'365','products' => $productsThemesPlasma),*/ $response = array( 'comments' => $modelInfo->getLatestComments(5), - 'products' => $productsThemesPlasma + 'products' => $productsAppAddons, + 'productsThemes' => $productsThemes, + ); ?> + -
+
diff --git a/httpdocs/theme/react/assets/css/home-main-container.css b/httpdocs/theme/react/assets/css/home-main-container.css index f7fb3ea74..81b3999cd 100644 --- a/httpdocs/theme/react/assets/css/home-main-container.css +++ b/httpdocs/theme/react/assets/css/home-main-container.css @@ -1 +1 @@ -#home-main-container{width:100%;height:100%;display:flex;flex-wrap:wrap;display:-webkit-flex;-webkit-flex-wrap:wrap;list-style:none;margin:0;padding:0}#home-main-container .left{flex:0 0 16.66666667%;padding-right:15px;padding-left:15px;min-width:200px}#home-main-container .right{flex:0 0 16.66666667%;padding-right:15px;min-width:200px}#home-main-container .middle{flex:1;padding:15px;display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}#home-main-container .middle .panelContainer{border:1px solid #ccc;border-radius:5px;background-image:url(http://cp1.hive01.com/img/opendesktop/back3.jpg);padding:8px;margin:0 5px 5px 0;width:40%}#home-main-container .middle .panelContainer div.title{color:#888888;font-size:11pt;font-weight:bold;border-bottom:1px solid #ccc;height:25px;padding-left:15px;margin-bottom:10px}#home-main-container .middle .panelContainer ul{list-style:none}#home-main-container .middle .panelContainer ul li{border-bottom:1px solid #ccc;padding:5px 0}#home-main-container .middle .panelContainer ul li:last-child{border-bottom:0} \ No newline at end of file +#home-main-container{width:100%;height:100%;display:flex;flex-wrap:wrap;display:-webkit-flex;-webkit-flex-wrap:wrap;list-style:none;margin:0;padding:0;font-family:Verdana,"Bitstream Vera Sans",Arial,Helvetica,Sans,"Bitstream Vera Serif";color:#444444;font-size:8pt;line-height:16px}#home-main-container a{color:#444444}#home-main-container .top{display:flex;flex:0 0 100%;color:#fff;padding-top:50px;height:250px;justify-content:center;background-image:url(../img/start-bg.png);background-position:center;background-repeat:no-repeat;background-size:cover}#home-main-container .left{flex:0 0 16.66666667%;padding-right:15px;padding-left:15px;min-width:200px}#home-main-container .right{flex:0 0 16.66666667%;padding-right:15px;min-width:200px}#home-main-container .middle{flex:1;padding:5px;display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}#home-main-container .middle .placeholder{width:30%;margin:0 5px 5px 0}#home-main-container .middle .panelContainer{border:1px solid #ccc;border-radius:5px;background-image:url(http://cp1.hive01.com/img/opendesktop/back3.jpg);padding:8px;margin:0 5px 5px 0;width:30%}#home-main-container .middle .panelContainer div.title{font-size:11pt;font-weight:bold;border-bottom:1px solid #ccc;height:20px;padding-left:5px;margin-bottom:10px;color:#888888;font-size:9pt}#home-main-container .middle .panelContainer .chatUser{width:100%;display:inline-block;min-height:45px;line-height:42px;padding-left:15px}#home-main-container .middle .panelContainer .chatUser img{width:42px;height:42px;border-radius:100%;display:block;float:left}#home-main-container .middle .panelContainer .chatUser .name{margin-left:50px;display:block}#home-main-container .middle .panelContainer ul,#home-main-container .middle .panelContainer ol{list-style:none;padding-left:20px}#home-main-container .middle .panelContainer ul li,#home-main-container .middle .panelContainer ol li{padding:5px 0}#home-main-container .middle .panelContainer ul li.chatMember a,#home-main-container .middle .panelContainer ol li.chatMember a{font-size:9pt;font-weight:bold}#home-main-container .middle .panelContainer ul li .productrow,#home-main-container .middle .panelContainer ol li .productrow{padding-bottom:5px;padding-top:5px;font-size:small}#home-main-container .middle .panelContainer ul li .productrow .rating,#home-main-container .middle .panelContainer ol li .productrow .rating{width:60px}#home-main-container .middle .panelContainer ul li .productrow .time,#home-main-container .middle .panelContainer ol li .productrow .time{font-size:smaller}#home-main-container .middle .panelContainer ul li .productrow .cntComments,#home-main-container .middle .panelContainer ol li .productrow .cntComments{font-size:smaller;display:block;padding-top:5px}#home-main-container .middle .panelContainer ul li .productrow .defaultProjectAvatar,#home-main-container .middle .panelContainer ol li .productrow .defaultProjectAvatar{width:50px;height:50px;color:#3B658A;line-height:50px;text-align:center;background-color:#e8eaf6}#home-main-container .middle .panelContainer ul li .productrow .productimg,#home-main-container .middle .panelContainer ol li .productrow .productimg{width:50px;height:50px}#home-main-container .middle .panelContainer ul li .productrow .product-user,#home-main-container .middle .panelContainer ol li .productrow .product-user{width:42px;height:42px;border-radius:100%}#home-main-container .middle .panelContainer ul li .productrow .commenttext,#home-main-container .middle .panelContainer ol li .productrow .commenttext{padding-left:20px}#home-main-container .middle .panelContainer ul li .productrow .product-info span,#home-main-container .middle .panelContainer ol li .productrow .product-info span{display:block;float:left;width:100%;line-height:14px;height:auto}#home-main-container .middle .panelContainer ul li .productrow .product-info span.product-info-title,#home-main-container .middle .panelContainer ol li .productrow .product-info span.product-info-title{color:#444444;font-size:10pt;font-weight:bold;display:block}#home-main-container .middle .panelContainer ul li .productrow .product-info span.product-info-date,#home-main-container .middle .panelContainer ol li .productrow .product-info span.product-info-date{padding-top:10px}#home-main-container .middle .panelContainer ul li .productrow .product-info span.product-info-user,#home-main-container .middle .panelContainer ol li .productrow .product-info span.product-info-user{color:#666}#home-main-container .middle .panelContainer ul li .productrow .score-info,#home-main-container .middle .panelContainer ol li .productrow .score-info{text-align:center;width:80%}#home-main-container .middle .panelContainer ul li .productrow .score-info .score-number,#home-main-container .middle .panelContainer ol li .productrow .score-info .score-number{width:100%;text-align:center;margin-bottom:0;font-size:8pt}#home-main-container .middle .panelContainer ul li .productrow .score-info .score-bar-container,#home-main-container .middle .panelContainer ol li .productrow .score-info .score-bar-container{width:100%;height:10px;background:#ccc;margin-bottom:5px}#home-main-container .middle .panelContainer ul li .productrow .score-info .score-bar-container .score-bar,#home-main-container .middle .panelContainer ol li .productrow .score-info .score-bar-container .score-bar{height:9px;background-color:#30c830;border-bottom:1px solid #2bb32b}#home-main-container .middle .panelContainer ul li .cm-content,#home-main-container .middle .panelContainer ol li .cm-content{min-height:60px}#home-main-container .middle .panelContainer ul li .cm-content .cm-userinfo,#home-main-container .middle .panelContainer ol li .cm-content .cm-userinfo{float:right;width:80px;text-align:center;padding:3px}#home-main-container .middle .panelContainer ul li .cm-content .cm-userinfo img,#home-main-container .middle .panelContainer ol li .cm-content .cm-userinfo img{width:42px;height:42px;border-radius:100%}#home-main-container .middle .panelContainer ul li .cm-content .cm-userinfo .username,#home-main-container .middle .panelContainer ol li .cm-content .cm-userinfo .username{display:block;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:small}#home-main-container .middle .panelContainer ul li .title,#home-main-container .middle .panelContainer ol li .title,#home-main-container .middle .panelContainer ul li .info-row,#home-main-container .middle .panelContainer ol li .info-row{display:block;width:100%;color:#777777}#home-main-container .middle .panelContainer ul li .title,#home-main-container .middle .panelContainer ol li .title{color:#444444;font-size:10pt;font-weight:bold}#home-main-container .middle .panelContainer ul li .content,#home-main-container .middle .panelContainer ol li .content{font-size:13px;line-height:1}#home-main-container .middle .panelContainer ul li .info-row span.comment-counter,#home-main-container .middle .panelContainer ol li .info-row span.comment-counter{float:right}#home-main-container .middle .panelContainer ul li+li,#home-main-container .middle .panelContainer ol li+li{border-top:1px solid #ccc} \ No newline at end of file diff --git a/httpdocs/theme/react/assets/img/start-bg.png b/httpdocs/theme/react/assets/img/start-bg.png new file mode 100644 index 000000000..c8683aead Binary files /dev/null and b/httpdocs/theme/react/assets/img/start-bg.png differ diff --git a/httpdocs/theme/react/assets/less/home-main-container.less b/httpdocs/theme/react/assets/less/home-main-container.less index 8f5dac936..87bf304c1 100644 --- a/httpdocs/theme/react/assets/less/home-main-container.less +++ b/httpdocs/theme/react/assets/less/home-main-container.less @@ -1,67 +1,270 @@ out: ../css/home-main-container.css, sourcemap: true, compress: true #home-main-container{ width: 100%; height: 100%; display: flex; flex-wrap: wrap; display: -webkit-flex; /* Safari */ -webkit-flex-wrap: wrap; /* Safari 6.1+ */ list-style: none; margin:0; padding: 0; + font-family: Verdana,"Bitstream Vera Sans",Arial,Helvetica,Sans,"Bitstream Vera Serif"; + color: #444444; + font-size: 8pt; + line-height: 16px; + a{ + color:#444444; + } + .top{ + display: flex; + flex: 0 0 100%; + color:#fff; + padding-top: 50px; + height: 250px; + justify-content:center; + background-image: url(../img/start-bg.png); + background-position: center; /* Center the image */ + background-repeat: no-repeat; /* Do not repeat the image */ + background-size: cover; /* Resize the background image to cover the entire container */ + } .left{ flex: 0 0 16.66666667%; padding-right: 15px; padding-left: 15px; min-width: 200px; } .right{ flex: 0 0 16.66666667%; padding-right: 15px; min-width: 200px; } .middle{ flex:1; - padding: 15px; + padding: 5px; display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center; + .placeholder{ + width: 30%; + margin: 0px 5px 5px 0; + } .panelContainer{ border: 1px solid #ccc; border-radius: 5px; background-image: url(http://cp1.hive01.com/img/opendesktop/back3.jpg); padding: 8px; margin: 0px 5px 5px 0; - width: 40%; + width: 30%; div.title{ color: #888888; font-size:11pt; font-weight: bold; border-bottom: 1px solid #ccc; - height: 25px; - padding-left: 15px; + height: 20px; + padding-left: 5px; margin-bottom: 10px; + + color: #888888; + font-size: 9pt; + } - ul{ + .chatUser + { + width: 100%; + display: inline-block; + min-height: 45px; + line-height: 42px; + padding-left: 15px; + img{ + width: 42px; + height: 42px; + border-radius: 100%; + display: block; + float: left; + } + .name{ + margin-left: 50px; + display: block; + } + + } + + ul, ol { list-style: none; - li{ - border-bottom: 1px solid #ccc; - padding: 5px 0; - &:last-child{ - border-bottom: 0px; + padding-left: 20px; + li { + padding: 5px 0px; + &.chatMember{ + a{ + font-size: 9pt; + font-weight: bold; + } + } + .productrow + { + padding-bottom: 5px; + padding-top: 5px; + font-size: small; + + .rating + { + width: 60px; + } + .time + { + font-size: smaller; + } + .cntComments + { + font-size: smaller; + display: block; + padding-top: 5px; + + } + .defaultProjectAvatar{ + width: 50px; + height: 50px; + color: #3B658A; + line-height: 50px; + text-align: center; + background-color: #e8eaf6; + } + .productimg + { + width:50px; + height:50px; + } + .product-user{ + width: 42px; + height: 42px; + border-radius: 100%; + } + .commenttext{ + padding-left: 20px; + + } + .product-info { + span { + display: block; + float: left; + width: 100%; + line-height: 14px; + height: auto; + + &.product-info-title { + color: #444444; + font-size: 10pt; + font-weight: bold; + display: block; + } + &.product-info-date{ + padding-top: 10px; + } + + + &.product-info-user { + color: #666; + } + } + } + .score-info { + text-align: center; + width: 80%; + .score-number { + width: 100%; + text-align: center; + margin-bottom: 0px; + font-size: 8pt; + } + + .score-bar-container { + width: 100%; + height: 10px; + background: #ccc; + margin-bottom: 5px; + + .score-bar { + height: 9px; + background-color: #30c830; + border-bottom: 1px solid darken( #30c830,5%); + } + } + } + } + .cm-content{ + min-height: 60px; + .cm-userinfo { + + float: right; + width: 80px; + text-align: center; + padding: 3px; + + img { + width: 42px; + height: 42px; + border-radius: 100%; + } + + .username { + display: block; + text-align: center; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + font-size: small; + + } + } + } + .title, .info-row { + display: block; + width: 100%; + color: #777777; + } + + .title { + color: #444444; + font-size: 10pt; + font-weight: bold; + } + + .content { + font-size: 13px; + line-height: 1; + } + + .info-row { + /*overflow: auto; + */ + + span { + /* + float: left; + display: inline-block; + font-size: 12px; + */ + + &.comment-counter { + float: right; + } + } } } + li + li { + border-top:1px solid #ccc; + } } - } } } diff --git a/httpdocs/theme/react/bundle/home-main-container-bundle.js b/httpdocs/theme/react/bundle/home-main-container-bundle.js index 4a914795b..39932b287 100644 --- a/httpdocs/theme/react/bundle/home-main-container-bundle.js +++ b/httpdocs/theme/react/bundle/home-main-container-bundle.js @@ -1,269 +1,14 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = "./src/entry-home-main-container.js"); -/******/ }) -/************************************************************************/ -/******/ ({ - -/***/ "./node_modules/object-assign/index.js": -/*!*********************************************!*\ - !*** ./node_modules/object-assign/index.js ***! - \*********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n//# sourceURL=webpack:///./node_modules/object-assign/index.js?"); - -/***/ }), - -/***/ "./node_modules/prop-types/checkPropTypes.js": -/*!***************************************************!*\ - !*** ./node_modules/prop-types/checkPropTypes.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar printWarning = function() {};\n\nif (true) {\n var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ \"./node_modules/prop-types/lib/ReactPropTypesSecret.js\");\n var loggedTypeFailures = {};\n\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n if (true) {\n for (var typeSpecName in typeSpecs) {\n if (typeSpecs.hasOwnProperty(typeSpecName)) {\n var error;\n // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n var err = Error(\n (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.'\n );\n err.name = 'Invariant Violation';\n throw err;\n }\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n } catch (ex) {\n error = ex;\n }\n if (error && !(error instanceof Error)) {\n printWarning(\n (componentName || 'React class') + ': type specification of ' +\n location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n 'You may have forgotten to pass an argument to the type checker ' +\n 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n 'shape all require an argument).'\n )\n\n }\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var stack = getStack ? getStack() : '';\n\n printWarning(\n 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n );\n }\n }\n }\n }\n}\n\nmodule.exports = checkPropTypes;\n\n\n//# sourceURL=webpack:///./node_modules/prop-types/checkPropTypes.js?"); - -/***/ }), - -/***/ "./node_modules/prop-types/lib/ReactPropTypesSecret.js": -/*!*************************************************************!*\ - !*** ./node_modules/prop-types/lib/ReactPropTypesSecret.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n\n\n//# sourceURL=webpack:///./node_modules/prop-types/lib/ReactPropTypesSecret.js?"); - -/***/ }), - -/***/ "./node_modules/react-timeago/lib/dateParser.js": -/*!******************************************************!*\ - !*** ./node_modules/react-timeago/lib/dateParser.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = dateParser;\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); }\n\nfunction dateParser(date) {\n var parsed = new Date(date);\n if (!Number.isNaN(parsed.valueOf())) {\n return parsed;\n }\n\n var parts = String(date).match(/\\d+/g);\n if (parts == null || parts.length <= 2) {\n return parsed;\n } else {\n var _parts$map = parts.map(function (x) {\n return parseInt(x);\n }),\n _parts$map2 = _toArray(_parts$map),\n firstP = _parts$map2[0],\n secondP = _parts$map2[1],\n restPs = _parts$map2.slice(2);\n\n var correctedParts = [firstP, secondP - 1].concat(_toConsumableArray(restPs));\n var isoDate = new Date(Date.UTC.apply(Date, _toConsumableArray(correctedParts)));\n return isoDate;\n }\n}\n\n//# sourceURL=webpack:///./node_modules/react-timeago/lib/dateParser.js?"); - -/***/ }), - -/***/ "./node_modules/react-timeago/lib/defaultFormatter.js": -/*!************************************************************!*\ - !*** ./node_modules/react-timeago/lib/defaultFormatter.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = defaultFormatter;\n\nvar _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n\nvar React = _interopRequireWildcard(_react);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction defaultFormatter(value, unit, suffix) {\n if (value !== 1) {\n unit += 's';\n }\n return value + ' ' + unit + ' ' + suffix;\n}\n\n//# sourceURL=webpack:///./node_modules/react-timeago/lib/defaultFormatter.js?"); - -/***/ }), - -/***/ "./node_modules/react-timeago/lib/index.js": -/*!*************************************************!*\ - !*** ./node_modules/react-timeago/lib/index.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n\nvar React = _interopRequireWildcard(_react);\n\nvar _defaultFormatter = __webpack_require__(/*! ./defaultFormatter */ \"./node_modules/react-timeago/lib/defaultFormatter.js\");\n\nvar _defaultFormatter2 = _interopRequireDefault(_defaultFormatter);\n\nvar _dateParser = __webpack_require__(/*! ./dateParser */ \"./node_modules/react-timeago/lib/dateParser.js\");\n\nvar _dateParser2 = _interopRequireDefault(_dateParser);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Component = React.Component;\n\n\n// Just some simple constants for readability\nvar MINUTE = 60;\nvar HOUR = MINUTE * 60;\nvar DAY = HOUR * 24;\nvar WEEK = DAY * 7;\nvar MONTH = DAY * 30;\nvar YEAR = DAY * 365;\n\nvar TimeAgo = function (_Component) {\n _inherits(TimeAgo, _Component);\n\n function TimeAgo() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, TimeAgo);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = TimeAgo.__proto__ || Object.getPrototypeOf(TimeAgo)).call.apply(_ref, [this].concat(args))), _this), _this.isStillMounted = false, _this.tick = function (refresh) {\n if (!_this.isStillMounted || !_this.props.live) {\n return;\n }\n\n var then = (0, _dateParser2.default)(_this.props.date).valueOf();\n if (!then) {\n console.warn('[react-timeago] Invalid Date provided');\n return;\n }\n\n var now = _this.props.now();\n var seconds = Math.round(Math.abs(now - then) / 1000);\n\n var unboundPeriod = seconds < MINUTE ? 1000 : seconds < HOUR ? 1000 * MINUTE : seconds < DAY ? 1000 * HOUR : 0;\n var period = Math.min(Math.max(unboundPeriod, _this.props.minPeriod * 1000), _this.props.maxPeriod * 1000);\n\n if (period) {\n if (_this.timeoutId) {\n clearTimeout(_this.timeoutId);\n }\n _this.timeoutId = setTimeout(_this.tick, period);\n }\n\n if (!refresh) {\n _this.forceUpdate();\n }\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(TimeAgo, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.isStillMounted = true;\n if (this.props.live) {\n this.tick(true);\n }\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate(lastProps) {\n if (this.props.live !== lastProps.live || this.props.date !== lastProps.date) {\n if (!this.props.live && this.timeoutId) {\n clearTimeout(this.timeoutId);\n }\n this.tick();\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.isStillMounted = false;\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n this.timeoutId = undefined;\n }\n }\n }, {\n key: 'render',\n value: function render() {\n /* eslint-disable no-unused-vars */\n var _props = this.props,\n date = _props.date,\n formatter = _props.formatter,\n Komponent = _props.component,\n live = _props.live,\n minPeriod = _props.minPeriod,\n maxPeriod = _props.maxPeriod,\n title = _props.title,\n now = _props.now,\n passDownProps = _objectWithoutProperties(_props, ['date', 'formatter', 'component', 'live', 'minPeriod', 'maxPeriod', 'title', 'now']);\n /* eslint-enable no-unused-vars */\n\n\n var then = (0, _dateParser2.default)(date).valueOf();\n if (!then) {\n return null;\n }\n var timeNow = now();\n var seconds = Math.round(Math.abs(timeNow - then) / 1000);\n var suffix = then < timeNow ? 'ago' : 'from now';\n\n var _ref2 = seconds < MINUTE ? [Math.round(seconds), 'second'] : seconds < HOUR ? [Math.round(seconds / MINUTE), 'minute'] : seconds < DAY ? [Math.round(seconds / HOUR), 'hour'] : seconds < WEEK ? [Math.round(seconds / DAY), 'day'] : seconds < MONTH ? [Math.round(seconds / WEEK), 'week'] : seconds < YEAR ? [Math.round(seconds / MONTH), 'month'] : [Math.round(seconds / YEAR), 'year'],\n _ref3 = _slicedToArray(_ref2, 2),\n value = _ref3[0],\n unit = _ref3[1];\n\n var passDownTitle = typeof title === 'undefined' ? typeof date === 'string' ? date : (0, _dateParser2.default)(date).toISOString().substr(0, 16).replace('T', ' ') : title;\n\n var spreadProps = Komponent === 'time' ? Object.assign({}, passDownProps, {\n dateTime: (0, _dateParser2.default)(date).toISOString()\n }) : passDownProps;\n\n var nextFormatter = _defaultFormatter2.default.bind(null, value, unit, suffix);\n\n return React.createElement(\n Komponent,\n _extends({}, spreadProps, { title: passDownTitle }),\n formatter(value, unit, suffix, then, nextFormatter, now)\n );\n }\n }]);\n\n return TimeAgo;\n}(Component);\n\nTimeAgo.displayName = 'TimeAgo';\nTimeAgo.defaultProps = {\n live: true,\n component: 'time',\n minPeriod: 0,\n maxPeriod: Infinity,\n formatter: _defaultFormatter2.default,\n now: function now() {\n return Date.now();\n }\n};\nexports.default = TimeAgo;\n\n//# sourceURL=webpack:///./node_modules/react-timeago/lib/index.js?"); - -/***/ }), - -/***/ "./node_modules/react/cjs/react.development.js": -/*!*****************************************************!*\ - !*** ./node_modules/react/cjs/react.development.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/** @license React v16.6.1\n * react.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n\n\nif (true) {\n (function() {\n'use strict';\n\nvar _assign = __webpack_require__(/*! object-assign */ \"./node_modules/object-assign/index.js\");\nvar checkPropTypes = __webpack_require__(/*! prop-types/checkPropTypes */ \"./node_modules/prop-types/checkPropTypes.js\");\n\n// TODO: this is special because it gets imported during build.\n\nvar ReactVersion = '16.6.3';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\n\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace;\n\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\n\nvar MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\n\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n return null;\n}\n\nvar enableHooks = false;\n// Helps identify side effects in begin-phase lifecycle hooks and setState reducers:\n\n\n// In some cases, StrictMode should also double-render lifecycles.\n// This can be confusing for tests though,\n// And it can be bad for performance in production.\n// This feature flag can be used to control the behavior:\n\n\n// To preserve the \"Pause on caught exceptions\" behavior of the debugger, we\n// replay the begin phase of a failed component inside invokeGuardedCallback.\n\n\n// Warn about deprecated, async-unsafe lifecycles; relates to RFC #6:\n\n\n// Gather advanced timing metrics for Profiler subtrees.\n\n\n// Trace which interactions trigger each commit.\n\n\n// Only used in www builds.\n\n\n// Only used in www builds.\n\n\n// React Fire: prevent the value and checked attributes from syncing\n// with their related DOM properties\n\n\n// These APIs will no longer be \"unstable\" in the upcoming 16.7 release,\n// Control this behavior with a flag to support 16.6 minor releases in the meanwhile.\nvar enableStableConcurrentModeAPIs = false;\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar validateFormat = function () {};\n\n{\n validateFormat = function (format) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n };\n}\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n validateFormat(format);\n\n if (!condition) {\n var error = void 0;\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n\n// Relying on the `invariant()` implementation lets us\n// preserve the format and params in the www builds.\n\n/**\n * Forked from fbjs/warning:\n * https://github.com/facebook/fbjs/blob/e66ba20ad5be433eb54423f2b097d829324d9de6/packages/fbjs/src/__forks__/warning.js\n *\n * Only change is we use console.warn instead of console.error,\n * and do nothing when 'console' is not supported.\n * This really simplifies the code.\n * ---\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar lowPriorityWarning = function () {};\n\n{\n var printWarning = function (format) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.warn(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n\n lowPriorityWarning = function (condition, format) {\n if (format === undefined) {\n throw new Error('`lowPriorityWarning(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n if (!condition) {\n for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n args[_key2 - 2] = arguments[_key2];\n }\n\n printWarning.apply(undefined, [format].concat(args));\n }\n };\n}\n\nvar lowPriorityWarning$1 = lowPriorityWarning;\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warningWithoutStack = function () {};\n\n{\n warningWithoutStack = function (condition, format) {\n for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n if (format === undefined) {\n throw new Error('`warningWithoutStack(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n if (args.length > 8) {\n // Check before the condition to catch violations early.\n throw new Error('warningWithoutStack() currently supports at most 8 arguments.');\n }\n if (condition) {\n return;\n }\n if (typeof console !== 'undefined') {\n var argsWithFormat = args.map(function (item) {\n return '' + item;\n });\n argsWithFormat.unshift('Warning: ' + format);\n\n // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n Function.prototype.apply.call(console.error, console, argsWithFormat);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n throw new Error(message);\n } catch (x) {}\n };\n}\n\nvar warningWithoutStack$1 = warningWithoutStack;\n\nvar didWarnStateUpdateForUnmountedComponent = {};\n\nfunction warnNoop(publicInstance, callerName) {\n {\n var _constructor = publicInstance.constructor;\n var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass';\n var warningKey = componentName + '.' + callerName;\n if (didWarnStateUpdateForUnmountedComponent[warningKey]) {\n return;\n }\n warningWithoutStack$1(false, \"Can't call %s on a component that is not yet mounted. \" + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName);\n didWarnStateUpdateForUnmountedComponent[warningKey] = true;\n }\n}\n\n/**\n * This is the abstract API for an update queue.\n */\nvar ReactNoopUpdateQueue = {\n /**\n * Checks whether or not this composite component is mounted.\n * @param {ReactClass} publicInstance The instance we want to test.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function (publicInstance) {\n return false;\n },\n\n /**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {?function} callback Called after component is updated.\n * @param {?string} callerName name of the calling function in the public API.\n * @internal\n */\n enqueueForceUpdate: function (publicInstance, callback, callerName) {\n warnNoop(publicInstance, 'forceUpdate');\n },\n\n /**\n * Replaces all of the state. Always use this or `setState` to mutate state.\n * You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} completeState Next state.\n * @param {?function} callback Called after component is updated.\n * @param {?string} callerName name of the calling function in the public API.\n * @internal\n */\n enqueueReplaceState: function (publicInstance, completeState, callback, callerName) {\n warnNoop(publicInstance, 'replaceState');\n },\n\n /**\n * Sets a subset of the state. This only exists because _pendingState is\n * internal. This provides a merging strategy that is not available to deep\n * properties which is confusing. TODO: Expose pendingState or don't use it\n * during the merge.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} partialState Next partial state to be merged with state.\n * @param {?function} callback Called after component is updated.\n * @param {?string} Name of the calling function in the public API.\n * @internal\n */\n enqueueSetState: function (publicInstance, partialState, callback, callerName) {\n warnNoop(publicInstance, 'setState');\n }\n};\n\nvar emptyObject = {};\n{\n Object.freeze(emptyObject);\n}\n\n/**\n * Base class helpers for the updating state of a component.\n */\nfunction Component(props, context, updater) {\n this.props = props;\n this.context = context;\n // If a component has string refs, we will assign a different object later.\n this.refs = emptyObject;\n // We initialize the default updater but the real one gets injected by the\n // renderer.\n this.updater = updater || ReactNoopUpdateQueue;\n}\n\nComponent.prototype.isReactComponent = {};\n\n/**\n * Sets a subset of the state. Always use this to mutate\n * state. You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * There is no guarantee that calls to `setState` will run synchronously,\n * as they may eventually be batched together. You can provide an optional\n * callback that will be executed when the call to setState is actually\n * completed.\n *\n * When a function is provided to setState, it will be called at some point in\n * the future (not synchronously). It will be called with the up to date\n * component arguments (state, props, context). These values can be different\n * from this.* because your function may be called after receiveProps but before\n * shouldComponentUpdate, and this new state, props, and context will not yet be\n * assigned to this.\n *\n * @param {object|function} partialState Next partial state or function to\n * produce next partial state to be merged with current state.\n * @param {?function} callback Called after state is updated.\n * @final\n * @protected\n */\nComponent.prototype.setState = function (partialState, callback) {\n !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? invariant(false, 'setState(...): takes an object of state variables to update or a function which returns an object of state variables.') : void 0;\n this.updater.enqueueSetState(this, partialState, callback, 'setState');\n};\n\n/**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {?function} callback Called after update is complete.\n * @final\n * @protected\n */\nComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');\n};\n\n/**\n * Deprecated APIs. These APIs used to exist on classic React classes but since\n * we would like to deprecate them, we're not going to move them over to this\n * modern base class. Instead, we define a getter that warns if it's accessed.\n */\n{\n var deprecatedAPIs = {\n isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\n replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']\n };\n var defineDeprecationWarning = function (methodName, info) {\n Object.defineProperty(Component.prototype, methodName, {\n get: function () {\n lowPriorityWarning$1(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]);\n return undefined;\n }\n });\n };\n for (var fnName in deprecatedAPIs) {\n if (deprecatedAPIs.hasOwnProperty(fnName)) {\n defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n }\n }\n}\n\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\n\n/**\n * Convenience component with default shallow equality check for sCU.\n */\nfunction PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n // If a component has string refs, we will assign a different object later.\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\n\nvar pureComponentPrototype = PureComponent.prototype = new ComponentDummy();\npureComponentPrototype.constructor = PureComponent;\n// Avoid an extra prototype jump for these methods.\n_assign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = true;\n\n// an immutable object with a single mutable value\nfunction createRef() {\n var refObject = {\n current: null\n };\n {\n Object.seal(refObject);\n }\n return refObject;\n}\n\n/**\n * Keeps track of the current owner.\n *\n * The current owner is the component who should own any components that are\n * currently being constructed.\n */\nvar ReactCurrentOwner = {\n /**\n * @internal\n * @type {ReactComponent}\n */\n current: null,\n currentDispatcher: null\n};\n\nvar BEFORE_SLASH_RE = /^(.*)[\\\\\\/]/;\n\nvar describeComponentFrame = function (name, source, ownerName) {\n var sourceInfo = '';\n if (source) {\n var path = source.fileName;\n var fileName = path.replace(BEFORE_SLASH_RE, '');\n {\n // In DEV, include code for a common special case:\n // prefer \"folder/index.js\" instead of just \"index.js\".\n if (/^index\\./.test(fileName)) {\n var match = path.match(BEFORE_SLASH_RE);\n if (match) {\n var pathBeforeSlash = match[1];\n if (pathBeforeSlash) {\n var folderName = pathBeforeSlash.replace(BEFORE_SLASH_RE, '');\n fileName = folderName + '/' + fileName;\n }\n }\n }\n }\n sourceInfo = ' (at ' + fileName + ':' + source.lineNumber + ')';\n } else if (ownerName) {\n sourceInfo = ' (created by ' + ownerName + ')';\n }\n return '\\n in ' + (name || 'Unknown') + sourceInfo;\n};\n\nvar Resolved = 1;\n\n\nfunction refineResolvedLazyComponent(lazyComponent) {\n return lazyComponent._status === Resolved ? lazyComponent._result : null;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var functionName = innerType.displayName || innerType.name || '';\n return outerType.displayName || (functionName !== '' ? wrapperName + '(' + functionName + ')' : wrapperName);\n}\n\nfunction getComponentName(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n {\n if (typeof type.tag === 'number') {\n warningWithoutStack$1(false, 'Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n if (typeof type === 'string') {\n return type;\n }\n switch (type) {\n case REACT_CONCURRENT_MODE_TYPE:\n return 'ConcurrentMode';\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n case REACT_PORTAL_TYPE:\n return 'Portal';\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n }\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n return 'Context.Consumer';\n case REACT_PROVIDER_TYPE:\n return 'Context.Provider';\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n case REACT_MEMO_TYPE:\n return getComponentName(type.type);\n case REACT_LAZY_TYPE:\n {\n var thenable = type;\n var resolvedThenable = refineResolvedLazyComponent(thenable);\n if (resolvedThenable) {\n return getComponentName(resolvedThenable);\n }\n }\n }\n }\n return null;\n}\n\nvar ReactDebugCurrentFrame = {};\n\nvar currentlyValidatingElement = null;\n\nfunction setCurrentlyValidatingElement(element) {\n {\n currentlyValidatingElement = element;\n }\n}\n\n{\n // Stack implementation injected by the current renderer.\n ReactDebugCurrentFrame.getCurrentStack = null;\n\n ReactDebugCurrentFrame.getStackAddendum = function () {\n var stack = '';\n\n // Add an extra top frame while an element is being validated\n if (currentlyValidatingElement) {\n var name = getComponentName(currentlyValidatingElement.type);\n var owner = currentlyValidatingElement._owner;\n stack += describeComponentFrame(name, currentlyValidatingElement._source, owner && getComponentName(owner.type));\n }\n\n // Delegate to the injected renderer-specific implementation\n var impl = ReactDebugCurrentFrame.getCurrentStack;\n if (impl) {\n stack += impl() || '';\n }\n\n return stack;\n };\n}\n\nvar ReactSharedInternals = {\n ReactCurrentOwner: ReactCurrentOwner,\n // Used by renderers to avoid bundling object-assign twice in UMD bundles:\n assign: _assign\n};\n\n{\n _assign(ReactSharedInternals, {\n // These should not be included in production.\n ReactDebugCurrentFrame: ReactDebugCurrentFrame,\n // Shim for React DOM 16.0.0 which still destructured (but not used) this.\n // TODO: remove in React 17.0.\n ReactComponentTreeHook: {}\n });\n}\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = warningWithoutStack$1;\n\n{\n warning = function (condition, format) {\n if (condition) {\n return;\n }\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n // eslint-disable-next-line react-internal/warning-and-invariant-args\n\n for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n warningWithoutStack$1.apply(undefined, [false, format + '%s'].concat(args, [stack]));\n };\n}\n\nvar warning$1 = warning;\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\n\nvar specialPropKeyWarningShown = void 0;\nvar specialPropRefWarningShown = void 0;\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n return config.key !== undefined;\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n warningWithoutStack$1(false, '%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName);\n }\n };\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n warningWithoutStack$1(false, '%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName);\n }\n };\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n}\n\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, no instanceof check\n * will work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} key\n * @param {string|object} ref\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @param {*} owner\n * @param {*} props\n * @internal\n */\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {};\n\n // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n });\n // self and source are DEV only properties.\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n });\n // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n};\n\n/**\n * Create and return a new ReactElement of the given type.\n * See https://reactjs.org/docs/react-api.html#createelement\n */\nfunction createElement(type, config, children) {\n var propName = void 0;\n\n // Reserved names are extracted\n var props = {};\n\n var key = null;\n var ref = null;\n var self = null;\n var source = null;\n\n if (config != null) {\n if (hasValidRef(config)) {\n ref = config.ref;\n }\n if (hasValidKey(config)) {\n key = '' + config.key;\n }\n\n self = config.__self === undefined ? null : config.__self;\n source = config.__source === undefined ? null : config.__source;\n // Remaining properties are added to a new props object\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n }\n }\n\n // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n var childrenLength = arguments.length - 2;\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n {\n if (Object.freeze) {\n Object.freeze(childArray);\n }\n }\n props.children = childArray;\n }\n\n // Resolve default props\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n {\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n }\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n}\n\n/**\n * Return a function that produces ReactElements of a given type.\n * See https://reactjs.org/docs/react-api.html#createfactory\n */\n\n\nfunction cloneAndReplaceKey(oldElement, newKey) {\n var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\n\n return newElement;\n}\n\n/**\n * Clone and return a new ReactElement using element as the starting point.\n * See https://reactjs.org/docs/react-api.html#cloneelement\n */\nfunction cloneElement(element, config, children) {\n !!(element === null || element === undefined) ? invariant(false, 'React.cloneElement(...): The argument must be a React element, but you passed %s.', element) : void 0;\n\n var propName = void 0;\n\n // Original props are copied\n var props = _assign({}, element.props);\n\n // Reserved names are extracted\n var key = element.key;\n var ref = element.ref;\n // Self is preserved since the owner is preserved.\n var self = element._self;\n // Source is preserved since cloneElement is unlikely to be targeted by a\n // transpiler, and the original source is probably a better indicator of the\n // true owner.\n var source = element._source;\n\n // Owner will be preserved, unless ref is overridden\n var owner = element._owner;\n\n if (config != null) {\n if (hasValidRef(config)) {\n // Silently steal the ref from the parent.\n ref = config.ref;\n owner = ReactCurrentOwner.current;\n }\n if (hasValidKey(config)) {\n key = '' + config.key;\n }\n\n // Remaining properties override existing props\n var defaultProps = void 0;\n if (element.type && element.type.defaultProps) {\n defaultProps = element.type.defaultProps;\n }\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n if (config[propName] === undefined && defaultProps !== undefined) {\n // Resolve default props\n props[propName] = defaultProps[propName];\n } else {\n props[propName] = config[propName];\n }\n }\n }\n }\n\n // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n var childrenLength = arguments.length - 2;\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n props.children = childArray;\n }\n\n return ReactElement(element.type, key, ref, self, source, owner, props);\n}\n\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\nfunction isValidElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\n\nvar SEPARATOR = '.';\nvar SUBSEPARATOR = ':';\n\n/**\n * Escape and wrap key so it is safe to use as a reactid\n *\n * @param {string} key to be escaped.\n * @return {string} the escaped key.\n */\nfunction escape(key) {\n var escapeRegex = /[=:]/g;\n var escaperLookup = {\n '=': '=0',\n ':': '=2'\n };\n var escapedString = ('' + key).replace(escapeRegex, function (match) {\n return escaperLookup[match];\n });\n\n return '$' + escapedString;\n}\n\n/**\n * TODO: Test that a single child and an array with one item have the same key\n * pattern.\n */\n\nvar didWarnAboutMaps = false;\n\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction escapeUserProvidedKey(text) {\n return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/');\n}\n\nvar POOL_SIZE = 10;\nvar traverseContextPool = [];\nfunction getPooledTraverseContext(mapResult, keyPrefix, mapFunction, mapContext) {\n if (traverseContextPool.length) {\n var traverseContext = traverseContextPool.pop();\n traverseContext.result = mapResult;\n traverseContext.keyPrefix = keyPrefix;\n traverseContext.func = mapFunction;\n traverseContext.context = mapContext;\n traverseContext.count = 0;\n return traverseContext;\n } else {\n return {\n result: mapResult,\n keyPrefix: keyPrefix,\n func: mapFunction,\n context: mapContext,\n count: 0\n };\n }\n}\n\nfunction releaseTraverseContext(traverseContext) {\n traverseContext.result = null;\n traverseContext.keyPrefix = null;\n traverseContext.func = null;\n traverseContext.context = null;\n traverseContext.count = 0;\n if (traverseContextPool.length < POOL_SIZE) {\n traverseContextPool.push(traverseContext);\n }\n}\n\n/**\n * @param {?*} children Children tree container.\n * @param {!string} nameSoFar Name of the key path so far.\n * @param {!function} callback Callback to invoke with each child found.\n * @param {?*} traverseContext Used to pass information throughout the traversal\n * process.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\n var type = typeof children;\n\n if (type === 'undefined' || type === 'boolean') {\n // All of the above are perceived as null.\n children = null;\n }\n\n var invokeCallback = false;\n\n if (children === null) {\n invokeCallback = true;\n } else {\n switch (type) {\n case 'string':\n case 'number':\n invokeCallback = true;\n break;\n case 'object':\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = true;\n }\n }\n }\n\n if (invokeCallback) {\n callback(traverseContext, children,\n // If it's the only child, treat the name as if it was wrapped in an array\n // so that it's consistent if the number of children grows.\n nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\n return 1;\n }\n\n var child = void 0;\n var nextName = void 0;\n var subtreeCount = 0; // Count of children found in the current subtree.\n var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\n\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n nextName = nextNamePrefix + getComponentKey(child, i);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n } else {\n var iteratorFn = getIteratorFn(children);\n if (typeof iteratorFn === 'function') {\n {\n // Warn about using Maps as children\n if (iteratorFn === children.entries) {\n !didWarnAboutMaps ? warning$1(false, 'Using Maps as children is unsupported and will likely yield ' + 'unexpected results. Convert it to a sequence/iterable of keyed ' + 'ReactElements instead.') : void 0;\n didWarnAboutMaps = true;\n }\n }\n\n var iterator = iteratorFn.call(children);\n var step = void 0;\n var ii = 0;\n while (!(step = iterator.next()).done) {\n child = step.value;\n nextName = nextNamePrefix + getComponentKey(child, ii++);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n } else if (type === 'object') {\n var addendum = '';\n {\n addendum = ' If you meant to render a collection of children, use an array ' + 'instead.' + ReactDebugCurrentFrame.getStackAddendum();\n }\n var childrenString = '' + children;\n invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum);\n }\n }\n\n return subtreeCount;\n}\n\n/**\n * Traverses children that are typically specified as `props.children`, but\n * might also be specified through attributes:\n *\n * - `traverseAllChildren(this.props.children, ...)`\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\n *\n * The `traverseContext` is an optional argument that is passed through the\n * entire traversal. It can be used to store accumulations or anything else that\n * the callback might find relevant.\n *\n * @param {?*} children Children tree object.\n * @param {!function} callback To invoke upon traversing each child.\n * @param {?*} traverseContext Context for traversal.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildren(children, callback, traverseContext) {\n if (children == null) {\n return 0;\n }\n\n return traverseAllChildrenImpl(children, '', callback, traverseContext);\n}\n\n/**\n * Generate a key string that identifies a component within a set.\n *\n * @param {*} component A component that could contain a manual key.\n * @param {number} index Index that is used if a manual key is not provided.\n * @return {string}\n */\nfunction getComponentKey(component, index) {\n // Do some typechecking here since we call this blindly. We want to ensure\n // that we don't block potential future ES APIs.\n if (typeof component === 'object' && component !== null && component.key != null) {\n // Explicit key\n return escape(component.key);\n }\n // Implicit key determined by the index in the set\n return index.toString(36);\n}\n\nfunction forEachSingleChild(bookKeeping, child, name) {\n var func = bookKeeping.func,\n context = bookKeeping.context;\n\n func.call(context, child, bookKeeping.count++);\n}\n\n/**\n * Iterates through children that are typically specified as `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenforeach\n *\n * The provided forEachFunc(child, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} forEachFunc\n * @param {*} forEachContext Context for forEachContext.\n */\nfunction forEachChildren(children, forEachFunc, forEachContext) {\n if (children == null) {\n return children;\n }\n var traverseContext = getPooledTraverseContext(null, null, forEachFunc, forEachContext);\n traverseAllChildren(children, forEachSingleChild, traverseContext);\n releaseTraverseContext(traverseContext);\n}\n\nfunction mapSingleChildIntoContext(bookKeeping, child, childKey) {\n var result = bookKeeping.result,\n keyPrefix = bookKeeping.keyPrefix,\n func = bookKeeping.func,\n context = bookKeeping.context;\n\n\n var mappedChild = func.call(context, child, bookKeeping.count++);\n if (Array.isArray(mappedChild)) {\n mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, function (c) {\n return c;\n });\n } else if (mappedChild != null) {\n if (isValidElement(mappedChild)) {\n mappedChild = cloneAndReplaceKey(mappedChild,\n // Keep both the (mapped) and old keys if they differ, just as\n // traverseAllChildren used to do for objects as children\n keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + '/' : '') + childKey);\n }\n result.push(mappedChild);\n }\n}\n\nfunction mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {\n var escapedPrefix = '';\n if (prefix != null) {\n escapedPrefix = escapeUserProvidedKey(prefix) + '/';\n }\n var traverseContext = getPooledTraverseContext(array, escapedPrefix, func, context);\n traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);\n releaseTraverseContext(traverseContext);\n}\n\n/**\n * Maps children that are typically specified as `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenmap\n *\n * The provided mapFunction(child, key, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} func The map function.\n * @param {*} context Context for mapFunction.\n * @return {object} Object containing the ordered map of results.\n */\nfunction mapChildren(children, func, context) {\n if (children == null) {\n return children;\n }\n var result = [];\n mapIntoWithKeyPrefixInternal(children, result, null, func, context);\n return result;\n}\n\n/**\n * Count the number of children that are typically specified as\n * `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrencount\n *\n * @param {?*} children Children tree container.\n * @return {number} The number of children.\n */\nfunction countChildren(children) {\n return traverseAllChildren(children, function () {\n return null;\n }, null);\n}\n\n/**\n * Flatten a children object (typically specified as `props.children`) and\n * return an array with appropriately re-keyed children.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrentoarray\n */\nfunction toArray(children) {\n var result = [];\n mapIntoWithKeyPrefixInternal(children, result, null, function (child) {\n return child;\n });\n return result;\n}\n\n/**\n * Returns the first child in a collection of children and verifies that there\n * is only one child in the collection.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenonly\n *\n * The current implementation of this function assumes that a single child gets\n * passed without a wrapper, but the purpose of this helper function is to\n * abstract away the particular structure of children.\n *\n * @param {?object} children Child collection structure.\n * @return {ReactElement} The first and only `ReactElement` contained in the\n * structure.\n */\nfunction onlyChild(children) {\n !isValidElement(children) ? invariant(false, 'React.Children.only expected to receive a single React element child.') : void 0;\n return children;\n}\n\nfunction createContext(defaultValue, calculateChangedBits) {\n if (calculateChangedBits === undefined) {\n calculateChangedBits = null;\n } else {\n {\n !(calculateChangedBits === null || typeof calculateChangedBits === 'function') ? warningWithoutStack$1(false, 'createContext: Expected the optional second argument to be a ' + 'function. Instead received: %s', calculateChangedBits) : void 0;\n }\n }\n\n var context = {\n $$typeof: REACT_CONTEXT_TYPE,\n _calculateChangedBits: calculateChangedBits,\n // As a workaround to support multiple concurrent renderers, we categorize\n // some renderers as primary and others as secondary. We only expect\n // there to be two concurrent renderers at most: React Native (primary) and\n // Fabric (secondary); React DOM (primary) and React ART (secondary).\n // Secondary renderers store their context values on separate fields.\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n // Used to track how many concurrent renderers this context currently\n // supports within in a single renderer. Such as parallel server rendering.\n _threadCount: 0,\n // These are circular\n Provider: null,\n Consumer: null\n };\n\n context.Provider = {\n $$typeof: REACT_PROVIDER_TYPE,\n _context: context\n };\n\n var hasWarnedAboutUsingNestedContextConsumers = false;\n var hasWarnedAboutUsingConsumerProvider = false;\n\n {\n // A separate object, but proxies back to the original context object for\n // backwards compatibility. It has a different $$typeof, so we can properly\n // warn for the incorrect usage of Context as a Consumer.\n var Consumer = {\n $$typeof: REACT_CONTEXT_TYPE,\n _context: context,\n _calculateChangedBits: context._calculateChangedBits\n };\n // $FlowFixMe: Flow complains about not setting a value, which is intentional here\n Object.defineProperties(Consumer, {\n Provider: {\n get: function () {\n if (!hasWarnedAboutUsingConsumerProvider) {\n hasWarnedAboutUsingConsumerProvider = true;\n warning$1(false, 'Rendering is not supported and will be removed in ' + 'a future major release. Did you mean to render instead?');\n }\n return context.Provider;\n },\n set: function (_Provider) {\n context.Provider = _Provider;\n }\n },\n _currentValue: {\n get: function () {\n return context._currentValue;\n },\n set: function (_currentValue) {\n context._currentValue = _currentValue;\n }\n },\n _currentValue2: {\n get: function () {\n return context._currentValue2;\n },\n set: function (_currentValue2) {\n context._currentValue2 = _currentValue2;\n }\n },\n _threadCount: {\n get: function () {\n return context._threadCount;\n },\n set: function (_threadCount) {\n context._threadCount = _threadCount;\n }\n },\n Consumer: {\n get: function () {\n if (!hasWarnedAboutUsingNestedContextConsumers) {\n hasWarnedAboutUsingNestedContextConsumers = true;\n warning$1(false, 'Rendering is not supported and will be removed in ' + 'a future major release. Did you mean to render instead?');\n }\n return context.Consumer;\n }\n }\n });\n // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty\n context.Consumer = Consumer;\n }\n\n {\n context._currentRenderer = null;\n context._currentRenderer2 = null;\n }\n\n return context;\n}\n\nfunction lazy(ctor) {\n return {\n $$typeof: REACT_LAZY_TYPE,\n _ctor: ctor,\n // React uses these fields to store the result.\n _status: -1,\n _result: null\n };\n}\n\nfunction forwardRef(render) {\n {\n if (render != null && render.$$typeof === REACT_MEMO_TYPE) {\n warningWithoutStack$1(false, 'forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).');\n } else if (typeof render !== 'function') {\n warningWithoutStack$1(false, 'forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render);\n } else {\n !(\n // Do not warn for 0 arguments because it could be due to usage of the 'arguments' object\n render.length === 0 || render.length === 2) ? warningWithoutStack$1(false, 'forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.') : void 0;\n }\n\n if (render != null) {\n !(render.defaultProps == null && render.propTypes == null) ? warningWithoutStack$1(false, 'forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?') : void 0;\n }\n }\n\n return {\n $$typeof: REACT_FORWARD_REF_TYPE,\n render: render\n };\n}\n\nfunction isValidElementType(type) {\n return typeof type === 'string' || typeof type === 'function' ||\n // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE);\n}\n\nfunction memo(type, compare) {\n {\n if (!isValidElementType(type)) {\n warningWithoutStack$1(false, 'memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type);\n }\n }\n return {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: compare === undefined ? null : compare\n };\n}\n\nfunction resolveDispatcher() {\n var dispatcher = ReactCurrentOwner.currentDispatcher;\n !(dispatcher !== null) ? invariant(false, 'Hooks can only be called inside the body of a function component.') : void 0;\n return dispatcher;\n}\n\nfunction useContext(Context, observedBits) {\n var dispatcher = resolveDispatcher();\n {\n // TODO: add a more generic warning for invalid values.\n if (Context._context !== undefined) {\n var realContext = Context._context;\n // Don't deduplicate because this legitimately causes bugs\n // and nobody should be using this in existing code.\n if (realContext.Consumer === Context) {\n warning$1(false, 'Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?');\n } else if (realContext.Provider === Context) {\n warning$1(false, 'Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?');\n }\n }\n }\n return dispatcher.useContext(Context, observedBits);\n}\n\nfunction useState(initialState) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useState(initialState);\n}\n\nfunction useReducer(reducer, initialState, initialAction) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useReducer(reducer, initialState, initialAction);\n}\n\nfunction useRef(initialValue) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useRef(initialValue);\n}\n\nfunction useEffect(create, inputs) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useEffect(create, inputs);\n}\n\nfunction useMutationEffect(create, inputs) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useMutationEffect(create, inputs);\n}\n\nfunction useLayoutEffect(create, inputs) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useLayoutEffect(create, inputs);\n}\n\nfunction useCallback(callback, inputs) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useCallback(callback, inputs);\n}\n\nfunction useMemo(create, inputs) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useMemo(create, inputs);\n}\n\nfunction useImperativeMethods(ref, create, inputs) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useImperativeMethods(ref, create, inputs);\n}\n\n/**\n * ReactElementValidator provides a wrapper around a element factory\n * which validates the props passed to the element. This is intended to be\n * used only in DEV and could be replaced by a static type checker for languages\n * that support it.\n */\n\nvar propTypesMisspellWarningShown = void 0;\n\n{\n propTypesMisspellWarningShown = false;\n}\n\nfunction getDeclarationErrorAddendum() {\n if (ReactCurrentOwner.current) {\n var name = getComponentName(ReactCurrentOwner.current.type);\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n return '';\n}\n\nfunction getSourceInfoErrorAddendum(elementProps) {\n if (elementProps !== null && elementProps !== undefined && elementProps.__source !== undefined) {\n var source = elementProps.__source;\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n return '';\n}\n\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n if (parentName) {\n info = '\\n\\nCheck the top-level render call using <' + parentName + '>.';\n }\n }\n return info;\n}\n\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\nfunction validateExplicitKey(element, parentType) {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n element._store.validated = true;\n\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true;\n\n // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n var childOwner = '';\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n // Give the component that originally created this child.\n childOwner = ' It was passed a child from ' + getComponentName(element._owner.type) + '.';\n }\n\n setCurrentlyValidatingElement(element);\n {\n warning$1(false, 'Each child in an array or iterator should have a unique \"key\" prop.' + '%s%s See https://fb.me/react-warning-keys for more information.', currentComponentErrorInfo, childOwner);\n }\n setCurrentlyValidatingElement(null);\n}\n\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\nfunction validateChildKeys(node, parentType) {\n if (typeof node !== 'object') {\n return;\n }\n if (Array.isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step = void 0;\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n}\n\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\nfunction validatePropTypes(element) {\n var type = element.type;\n var name = void 0,\n propTypes = void 0;\n if (typeof type === 'function') {\n // Class or function component\n name = type.displayName || type.name;\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && type !== null && type.$$typeof === REACT_FORWARD_REF_TYPE) {\n // ForwardRef\n var functionName = type.render.displayName || type.render.name || '';\n name = type.displayName || (functionName !== '' ? 'ForwardRef(' + functionName + ')' : 'ForwardRef');\n propTypes = type.propTypes;\n } else {\n return;\n }\n if (propTypes) {\n setCurrentlyValidatingElement(element);\n checkPropTypes(propTypes, element.props, 'prop', name, ReactDebugCurrentFrame.getStackAddendum);\n setCurrentlyValidatingElement(null);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true;\n warningWithoutStack$1(false, 'Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', name || 'Unknown');\n }\n if (typeof type.getDefaultProps === 'function') {\n !type.getDefaultProps.isReactClassApproved ? warningWithoutStack$1(false, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.') : void 0;\n }\n}\n\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\nfunction validateFragmentProps(fragment) {\n setCurrentlyValidatingElement(fragment);\n\n var keys = Object.keys(fragment.props);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (key !== 'children' && key !== 'key') {\n warning$1(false, 'Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n warning$1(false, 'Invalid attribute `ref` supplied to `React.Fragment`.');\n }\n\n setCurrentlyValidatingElement(null);\n}\n\nfunction createElementWithValidation(type, props, children) {\n var validType = isValidElementType(type);\n\n // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n if (!validType) {\n var info = '';\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendum(props);\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString = void 0;\n if (type === null) {\n typeString = 'null';\n } else if (Array.isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = '<' + (getComponentName(type.type) || 'Unknown') + ' />';\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n warning$1(false, 'React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n\n var element = createElement.apply(this, arguments);\n\n // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n if (element == null) {\n return element;\n }\n\n // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n if (validType) {\n for (var i = 2; i < arguments.length; i++) {\n validateChildKeys(arguments[i], type);\n }\n }\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n}\n\nfunction createFactoryWithValidation(type) {\n var validatedFactory = createElementWithValidation.bind(null, type);\n validatedFactory.type = type;\n // Legacy hook: remove it\n {\n Object.defineProperty(validatedFactory, 'type', {\n enumerable: false,\n get: function () {\n lowPriorityWarning$1(false, 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.');\n Object.defineProperty(this, 'type', {\n value: type\n });\n return type;\n }\n });\n }\n\n return validatedFactory;\n}\n\nfunction cloneElementWithValidation(element, props, children) {\n var newElement = cloneElement.apply(this, arguments);\n for (var i = 2; i < arguments.length; i++) {\n validateChildKeys(arguments[i], newElement.type);\n }\n validatePropTypes(newElement);\n return newElement;\n}\n\nvar React = {\n Children: {\n map: mapChildren,\n forEach: forEachChildren,\n count: countChildren,\n toArray: toArray,\n only: onlyChild\n },\n\n createRef: createRef,\n Component: Component,\n PureComponent: PureComponent,\n\n createContext: createContext,\n forwardRef: forwardRef,\n lazy: lazy,\n memo: memo,\n\n Fragment: REACT_FRAGMENT_TYPE,\n StrictMode: REACT_STRICT_MODE_TYPE,\n Suspense: REACT_SUSPENSE_TYPE,\n\n createElement: createElementWithValidation,\n cloneElement: cloneElementWithValidation,\n createFactory: createFactoryWithValidation,\n isValidElement: isValidElement,\n\n version: ReactVersion,\n\n __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: ReactSharedInternals\n};\n\nif (enableStableConcurrentModeAPIs) {\n React.ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\n React.Profiler = REACT_PROFILER_TYPE;\n} else {\n React.unstable_ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\n React.unstable_Profiler = REACT_PROFILER_TYPE;\n}\n\nif (enableHooks) {\n React.useCallback = useCallback;\n React.useContext = useContext;\n React.useEffect = useEffect;\n React.useImperativeMethods = useImperativeMethods;\n React.useLayoutEffect = useLayoutEffect;\n React.useMemo = useMemo;\n React.useMutationEffect = useMutationEffect;\n React.useReducer = useReducer;\n React.useRef = useRef;\n React.useState = useState;\n}\n\n\n\nvar React$2 = Object.freeze({\n\tdefault: React\n});\n\nvar React$3 = ( React$2 && React ) || React$2;\n\n// TODO: decide on the top-level export form.\n// This is hacky but makes it work with both Rollup and Jest.\nvar react = React$3.default || React$3;\n\nmodule.exports = react;\n })();\n}\n\n\n//# sourceURL=webpack:///./node_modules/react/cjs/react.development.js?"); - -/***/ }), - -/***/ "./node_modules/react/index.js": -/*!*************************************!*\ - !*** ./node_modules/react/index.js ***! - \*************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react.development.js */ \"./node_modules/react/cjs/react.development.js\");\n}\n\n\n//# sourceURL=webpack:///./node_modules/react/index.js?"); - -/***/ }), - -/***/ "./src/entry-home-main-container.js": -/*!******************************************!*\ - !*** ./src/entry-home-main-container.js ***! - \******************************************/ -/*! no exports provided */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _opendesktop_home_HomeMainContainer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./opendesktop-home/HomeMainContainer */ \"./src/opendesktop-home/HomeMainContainer.js\");\n\n\nReactDOM.render(react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_opendesktop_home_HomeMainContainer__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null), document.getElementById('main-content'));\n\n//# sourceURL=webpack:///./src/entry-home-main-container.js?"); - -/***/ }), - -/***/ "./src/opendesktop-home/BlogFeedContainer.js": -/*!***************************************************!*\ - !*** ./src/opendesktop-home/BlogFeedContainer.js ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_timeago__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-timeago */ \"./node_modules/react-timeago/lib/index.js\");\n/* harmony import */ var react_timeago__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_timeago__WEBPACK_IMPORTED_MODULE_1__);\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\n\n\nvar BlogFeedContainer =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inherits(BlogFeedContainer, _React$Component);\n\n function BlogFeedContainer(props) {\n var _this;\n\n _classCallCheck(this, BlogFeedContainer);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(BlogFeedContainer).call(this, props));\n _this.state = {};\n return _this;\n }\n\n _createClass(BlogFeedContainer, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var self = this;\n $.ajax(\"https://forum.opendesktop.org/latest.json\").then(function (result) {\n var topics = result.topic_list.topics;\n topics.sort(function (a, b) {\n return new Date(b.last_posted_at) - new Date(a.last_posted_at);\n });\n topics = topics.slice(0, 5);\n self.setState({\n items: topics\n });\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var feedItemsContainer;\n\n if (this.state.items) {\n var feedItems = this.state.items.map(function (fi, index) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", {\n key: index\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", {\n className: \"title\",\n href: \"https://forum.opendesktop.org//t/\" + fi.id\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", null, fi.title)), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"info-row\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"date\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_timeago__WEBPACK_IMPORTED_MODULE_1___default.a, {\n date: fi.created_at\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"comment-counter\"\n }, fi.reply_count, \" replies\")));\n });\n feedItemsContainer = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"ul\", null, feedItems);\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"panelContainer\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"title\"\n }, \"Forum\"), feedItemsContainer);\n }\n }]);\n\n return BlogFeedContainer;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.Component);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (BlogFeedContainer);\n\n//# sourceURL=webpack:///./src/opendesktop-home/BlogFeedContainer.js?"); - -/***/ }), - -/***/ "./src/opendesktop-home/CommentsContainer.js": -/*!***************************************************!*\ - !*** ./src/opendesktop-home/CommentsContainer.js ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_timeago__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-timeago */ \"./node_modules/react-timeago/lib/index.js\");\n/* harmony import */ var react_timeago__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_timeago__WEBPACK_IMPORTED_MODULE_1__);\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\n\n\nvar CommentsContainer =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inherits(CommentsContainer, _React$Component);\n\n function CommentsContainer() {\n _classCallCheck(this, CommentsContainer);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(CommentsContainer).apply(this, arguments));\n }\n\n _createClass(CommentsContainer, [{\n key: \"render\",\n value: function render() {\n var commentsContainer;\n\n if (this.props.comments) {\n var comments = this.props.comments.map(function (cm, index) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", {\n key: index\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"cm-content\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"cm-userinfo\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"img\", {\n src: cm.profile_image_url\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"username\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", {\n href: \"/p/\" + cm.comment_target_id\n }, cm.username))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", {\n className: \"title\",\n href: \"/member/\" + cm.member_id\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", null, cm.title)), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"content\"\n }, cm.comment_text), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"info-row\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"date\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_timeago__WEBPACK_IMPORTED_MODULE_1___default.a, {\n date: cm.comment_created_at\n })))));\n });\n commentsContainer = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"ul\", null, comments);\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"panelContainer\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"title\"\n }, \"Comments\"), commentsContainer);\n }\n }]);\n\n return CommentsContainer;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.Component);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (CommentsContainer);\n\n//# sourceURL=webpack:///./src/opendesktop-home/CommentsContainer.js?"); - -/***/ }), - -/***/ "./src/opendesktop-home/HomeMainContainer.js": -/*!***************************************************!*\ - !*** ./src/opendesktop-home/HomeMainContainer.js ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _RssNewsContainer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./RssNewsContainer */ \"./src/opendesktop-home/RssNewsContainer.js\");\n/* harmony import */ var _BlogFeedContainer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./BlogFeedContainer */ \"./src/opendesktop-home/BlogFeedContainer.js\");\n/* harmony import */ var _CommentsContainer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./CommentsContainer */ \"./src/opendesktop-home/CommentsContainer.js\");\n/* harmony import */ var _ProductsContainer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ProductsContainer */ \"./src/opendesktop-home/ProductsContainer.js\");\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\n\n\n\n\n\nvar HomeMainContainer =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(HomeMainContainer, _Component);\n\n function HomeMainContainer(props) {\n var _this;\n\n _classCallCheck(this, HomeMainContainer);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(HomeMainContainer).call(this, props));\n _this.state = _objectSpread({}, window.data);\n return _this;\n }\n\n _createClass(HomeMainContainer, [{\n key: \"render\",\n value: function render() {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n id: \"home-main-container\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"left\"\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"middle\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_RssNewsContainer__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_BlogFeedContainer__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_CommentsContainer__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n comments: this.state.comments\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_ProductsContainer__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n products: this.state.products\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"right\"\n }, \" \"));\n }\n }]);\n\n return HomeMainContainer;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (HomeMainContainer);\n\n//# sourceURL=webpack:///./src/opendesktop-home/HomeMainContainer.js?"); - -/***/ }), - -/***/ "./src/opendesktop-home/Product.js": -/*!*****************************************!*\ - !*** ./src/opendesktop-home/Product.js ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_timeago__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-timeago */ \"./node_modules/react-timeago/lib/index.js\");\n/* harmony import */ var react_timeago__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_timeago__WEBPACK_IMPORTED_MODULE_1__);\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\n\n\nvar Product =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inherits(Product, _React$Component);\n\n function Product() {\n _classCallCheck(this, Product);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Product).apply(this, arguments));\n }\n\n _createClass(Product, [{\n key: \"render\",\n value: function render() {\n var createdDate = this.props.product.changed_at ? this.props.product.changed_at : this.props.product.created_at;\n var scoreDisplay = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"score-info\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"score-number\"\n }, \"score \", this.props.product.laplace_score + \"%\"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"score-bar-container\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"score-bar\",\n style: {\n \"width\": this.props.product.laplace_score + \"%\"\n }\n })));\n var productInfoDisplay = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"product-info\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"product-info-title\"\n }, this.props.product.title), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"product-info-category\"\n }, this.props.product.cat_title), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"product-info-date\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_timeago__WEBPACK_IMPORTED_MODULE_1___default.a, {\n date: createdDate\n })), scoreDisplay);\n var projectUrl = \"/p/\" + this.props.product.project_id;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", {\n href: projectUrl\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"figure\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"img\", {\n className: \"very-rounded-corners\",\n src: this.props.product.image_small\n })))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, productInfoDisplay));\n }\n }]);\n\n return Product;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.Component);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Product);\n\n//# sourceURL=webpack:///./src/opendesktop-home/Product.js?"); - -/***/ }), - -/***/ "./src/opendesktop-home/ProductsContainer.js": -/*!***************************************************!*\ - !*** ./src/opendesktop-home/ProductsContainer.js ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _Product__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Product */ \"./src/opendesktop-home/Product.js\");\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\n\n\nvar ProductsContainer =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inherits(ProductsContainer, _React$Component);\n\n function ProductsContainer(props) {\n _classCallCheck(this, ProductsContainer);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ProductsContainer).call(this, props));\n }\n\n _createClass(ProductsContainer, [{\n key: \"render\",\n value: function render() {\n var container;\n\n if (this.props.products) {\n var products = this.props.products.map(function (product, index) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"row\",\n key: index\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_Product__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n product: product\n }));\n });\n container = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, products);\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"panelContainer\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"title\"\n }, \"Products\"), container);\n }\n }]);\n\n return ProductsContainer;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.Component);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ProductsContainer);\n\n//# sourceURL=webpack:///./src/opendesktop-home/ProductsContainer.js?"); - -/***/ }), - -/***/ "./src/opendesktop-home/RssNewsContainer.js": -/*!**************************************************!*\ - !*** ./src/opendesktop-home/RssNewsContainer.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_timeago__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-timeago */ \"./node_modules/react-timeago/lib/index.js\");\n/* harmony import */ var react_timeago__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_timeago__WEBPACK_IMPORTED_MODULE_1__);\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\n\n\nvar RssNewsContainer =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(RssNewsContainer, _Component);\n\n function RssNewsContainer(props) {\n var _this;\n\n _classCallCheck(this, RssNewsContainer);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(RssNewsContainer).call(this, props));\n _this.state = {};\n return _this;\n }\n\n _createClass(RssNewsContainer, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var self = this;\n $.getJSON(\"https://blog.opendesktop.org/?json=1&callback=?\", function (res) {\n self.setState({\n items: res.posts\n });\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var feedItemsContainer;\n\n if (this.state.items) {\n var feedItems = this.state.items.slice(0, 5).map(function (fi, index) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", {\n key: index\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", {\n className: \"title\",\n href: fi.url\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", null, fi.title)), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"info-row\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"date\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_timeago__WEBPACK_IMPORTED_MODULE_1___default.a, {\n date: fi.date\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"comment-counter\"\n }, fi.comment_count, \" comments\")));\n });\n feedItemsContainer = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"ul\", null, feedItems);\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n id: \"rss-new-container\",\n className: \"panelContainer\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"title\"\n }, \"News\"), feedItemsContainer);\n }\n }]);\n\n return RssNewsContainer;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (RssNewsContainer);\n\n//# sourceURL=webpack:///./src/opendesktop-home/RssNewsContainer.js?"); - -/***/ }) - -/******/ }); \ No newline at end of file +!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=10)}([function(e,t,n){"use strict";e.exports=n(3)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,["date","formatter","component","live","minPeriod","maxPeriod","title","now"]),v=(0,u.default)(t).valueOf();if(!v)return null;var g=s(),_=Math.round(Math.abs(g-v)/1e3),O=v=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}var u=function(){function e(e,t){for(var n=0;n=this.measureWidth(r))return this.onToggled(!1),(0,n.createElement)(a,s,r);var p="";if(i&&"string"==typeof i.type){var m=i.type;(m.indexOf("span")>=0||m.indexOf("a")>=0)&&(p=i.props.children)}for(var y=1,d=r.length,b="",h=0,v=0,g=t,_=0,O=!1,w=!1,E=0,j=-1,S="",P=0;g-- >0;){for(S=g?"":u+(p?" "+p:"");y<=d;){if(b=r.substr(v,y),!((_=this.measureWidth(b+S))=l)break;b=r.substr(v,y),g||y--," "===b[b.length-1]&&(b=r.substr(v,y-1)),O&&(j=b.lastIndexOf(" "))>-1?(y=j,g&&y++,b=r.substr(v,y)):(y--,b=r.substr(v,y)),_=this.measureWidth(b+S)}while(_>=f&&b.length>0);v+=y;break}-1===(h=r.indexOf(" ",y+1))?(y+=1,O=!1):(O=!0,y=h)}if(y>=d){v=d;break}O&&!w&&-1===r.substr(E,y).indexOf(" ")&&(w=-1===r.substr(E,y).indexOf(" "),g--),E=y+1}return v===d?(this.onToggled(!1),(0,n.createElement)(a,s,r)):(this.onTruncated(),this.onToggled(!0),o.default.createElement("div",s,(0,n.createElement)(a,s,r.substr(0,v)+u+" "),i))}},{key:"render",value:function(){var e=this,t=this.props,r=t.element,o=t.text,a=t.style,i=void 0===a?{}:a,u=t.containerClassName,l=t.line,s=(t.onCalculated,t.onTruncated,t.textElement),f=(t.textTruncateChild,t.truncateText,t.maxCalculateTimes,c(t,["element","text","style","containerClassName","line","onCalculated","onTruncated","textElement","textTruncateChild","truncateText","maxCalculateTimes"])),p=i.fontWeight,m=i.fontStyle,y=i.fontSize,d=i.fontFamily,b=this.scope&&l?this.getRenderText():(0,n.createElement)(s,f,o),h={ref:function(t){e.scope=t},className:u,style:{overflow:"hidden",fontWeight:p,fontStyle:m,fontSize:y,fontFamily:d}};return this.scope&&this.onCalculated(),(0,n.createElement)(r,h,b)}}]),t}(n.Component);s.propTypes={containerClassName:a.default.string,element:a.default.string,line:a.default.oneOfType([a.default.number,a.default.bool]),onCalculated:a.default.func,onTruncated:a.default.func,onToggled:a.default.func,text:a.default.string,textElement:a.default.node,textTruncateChild:a.default.node,truncateText:a.default.string,maxCalculateTimes:a.default.number},s.defaultProps={element:"div",line:1,text:"",textElement:"span",truncateText:"…",maxCalculateTimes:10},t.default=s,e.exports=t.default})?r.apply(t,o):r)||(e.exports=a)},function(e,t,n){"use strict"; +/** @license React v16.6.1 + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var r=n(4),o="function"==typeof Symbol&&Symbol.for,a=o?Symbol.for("react.element"):60103,i=o?Symbol.for("react.portal"):60106,c=o?Symbol.for("react.fragment"):60107,u=o?Symbol.for("react.strict_mode"):60108,l=o?Symbol.for("react.profiler"):60114,s=o?Symbol.for("react.provider"):60109,f=o?Symbol.for("react.context"):60110,p=o?Symbol.for("react.concurrent_mode"):60111,m=o?Symbol.for("react.forward_ref"):60112,y=o?Symbol.for("react.suspense"):60113,d=o?Symbol.for("react.memo"):60115,b=o?Symbol.for("react.lazy"):60116,h="function"==typeof Symbol&&Symbol.iterator;function v(e){for(var t=arguments.length-1,n="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=0;rN.length&&N.push(e)}function A(e,t,n){return null==e?0:function e(t,n,r,o){var c=typeof t;"undefined"!==c&&"boolean"!==c||(t=null);var u=!1;if(null===t)u=!0;else switch(c){case"string":case"number":u=!0;break;case"object":switch(t.$$typeof){case a:case i:u=!0}}if(u)return r(o,t,""===n?"."+U(t,0):n),1;if(u=0,n=""===n?".":n+":",Array.isArray(t))for(var l=0;l ( +
  • + + {fi.title} + + + + {fi.reply_count} replies + +
  • + )); + + feedItemsContainer =
      {feedItems}
    ; + } + return ( +
    +
    Forum
    + {feedItemsContainer} +
    + ) + } +} + +export default BlogFeedContainer; diff --git a/httpdocs/theme/react/opendesktop-home/ChatContainer.js b/httpdocs/theme/react/opendesktop-home/ChatContainer.js new file mode 100644 index 000000000..13118956c --- /dev/null +++ b/httpdocs/theme/react/opendesktop-home/ChatContainer.js @@ -0,0 +1,93 @@ +import React, { Component } from 'react'; + +class ChatContainer extends Component { + + constructor(props){ + super(props); + this.access_token = 'MDAyMmxvY2F0aW9uIGNoYXQub3BlbmRlc2t0b3Aub3JnCjAwMTNpZGVudGlmaWVyIGtleQowMDEwY2lkIGdlbiA9IDEKMDAzM2NpZCB1c2VyX2lkID0gQG1hZ2dpZWRvbmc6Y2hhdC5vcGVuZGVza3RvcC5vcmcKMDAxNmNpZCB0eXBlID0gYWNjZXNzCjAwMjFjaWQgbm9uY2UgPSBnMSxnRUA2c3AuKyxtYSx4CjAwMmZzaWduYXR1cmUgc3LtmFDiz7wU0TVOdGS7EbEg0wnXVKwXxNqkqe5qpCAK'; + this.avatarUrl= 'https://chat.opendesktop.org/_matrix/media/v1/thumbnail'; + this.roomPublicUrl='https://chat.opendesktop.org/_matrix/client/unstable/publicRooms'; + this.roomsUrl= 'https://chat.opendesktop.org/_matrix/client/unstable/rooms/'; + this.roomUrl='https://chat.opendesktop.org/#/room/'; + this.state = {items:[]}; + } + + componentDidMount() { + const urlRooms = `${this.roomPublicUrl}?access_token=${this.access_token}`; + const urlMembers = this.roomsUrl; + fetch(urlRooms) + .then(response => response.json()) + .then(data => { + data.chunk.map((fi,index) => { + let url = urlMembers+fi.room_id+`/joined_members?access_token=${this.access_token}`; + return fetch(url) + .then(response => response.json()) + .then(data => { + var arr = []; + for (var key in data.joined) { + arr.push(data.joined[key]); + } + fi.members = arr; + let items = this.state.items.concat(fi); + this.setState({items:items}); + }) + }); + }); + + + // $.getJSON("https://chat.opendesktop.org/_matrix/client/unstable/publicRooms?access_token=MDAyMmxvY2F0aW9uIGNoYXQub3BlbmRlc2t0b3Aub3JnCjAwMTNpZGVudGlmaWVyIGtleQowMDEwY2lkIGdlbiA9IDEKMDAzN2NpZCB1c2VyX2lkID0gQGtpbWltcG9zc2libGUyOmNoYXQub3BlbmRlc2t0b3Aub3JnCjAwMTZjaWQgdHlwZSA9IGFjY2VzcwowMDIxY2lkIG5vbmNlID0gV2RFWmEuZ343eGx2a1czMQowMDJmc2lnbmF0dXJlICcmEgjLFNY7i2wHGT84mPr1eH4F6vNjTm3s8zZ4ZQVkCg", function (res) { + // self.setState({items:res.chunk}); + // }); + } + + render(){ + let container; + if (this.state.items){ + const feedItems = this.state.items.map((fi,index) => { + let members; + if(fi.members){ + members = fi.members.slice(0,4).map((m,index) => { + let imgAvatar; + if(m.avatar_url){ + imgAvatar = + } + return ( +
    + {imgAvatar} +
    + {m.display_name} +
    +
    + ) + } + ); + + + // members = fi.members.map((m,index) => ( + //
    + // {m.display_name} + //
    + // )); + } + return ( +
  • + + join our chat {fi.canonical_alias.substring(0,fi.canonical_alias.indexOf(':'))+' ('+fi.num_joined_members+')'} + + {members} +
  • + ) + + }); + container =
      {feedItems}
    ; + } + return ( +
    +
    Riot Chat
    + {container} +
    + ) + } +} + +export default ChatContainer; diff --git a/httpdocs/theme/react/opendesktop-home/ChatMember.js b/httpdocs/theme/react/opendesktop-home/ChatMember.js new file mode 100644 index 000000000..d4ee063bf --- /dev/null +++ b/httpdocs/theme/react/opendesktop-home/ChatMember.js @@ -0,0 +1,12 @@ +import React from 'react'; + +function ChatMember(props) { + return ( +
    + + {props.display_name} +
    ; + ) +} + +export default ChatMember; diff --git a/httpdocs/theme/react/opendesktop-home/CommentsContainer.js b/httpdocs/theme/react/opendesktop-home/CommentsContainer.js new file mode 100644 index 000000000..1e2396c2c --- /dev/null +++ b/httpdocs/theme/react/opendesktop-home/CommentsContainer.js @@ -0,0 +1,37 @@ +import React, { Component } from 'react'; +import TimeAgo from 'react-timeago'; +class CommentsContainer extends React.Component { + render(){ + let commentsContainer; + if (this.props.comments){ + const comments = this.props.comments.map((cm,index) => ( +
  • +
    + + + {cm.username} + + {cm.title} + + {cm.comment_text} + + + + + + +
    +
  • + )); + commentsContainer =
      {comments}
    + } + return ( +
    +
    Comments
    + {commentsContainer} +
    + ) + } +} + +export default CommentsContainer; diff --git a/httpdocs/theme/react/opendesktop-home/DrawerOpenRight.js b/httpdocs/theme/react/opendesktop-home/DrawerOpenRight.js new file mode 100644 index 000000000..9616203c9 --- /dev/null +++ b/httpdocs/theme/react/opendesktop-home/DrawerOpenRight.js @@ -0,0 +1,33 @@ +import React from 'react'; +import Drawer from '@material-ui/core/Drawer'; +import AppBar from '@material-ui/core/AppBar'; +import Button from '@material-ui/core/Button'; + +class DrawerOpenRight extends React.Component { + + constructor(props) { + super(props); + this.state = {open: false}; + this.handleToggle=this.handleToggle.bind(this); + } + + handleToggle(){ + this.setState({open: !this.state.open}); + } + + render() { + return ( +
    +
    + ); + } +} + +export default DrawerOpenRight; diff --git a/httpdocs/theme/react/opendesktop-home/HomeMainContainer.js b/httpdocs/theme/react/opendesktop-home/HomeMainContainer.js new file mode 100644 index 000000000..f4f3ca7bb --- /dev/null +++ b/httpdocs/theme/react/opendesktop-home/HomeMainContainer.js @@ -0,0 +1,38 @@ +import React, { Component } from 'react'; +import RssNewsContainer from './RssNewsContainer'; +import BlogFeedContainer from './BlogFeedContainer'; +import CommentsContainer from './CommentsContainer'; +import ProductsContainer from './ProductsContainer'; +import ChatContainer from './ChatContainer'; +import ProductsGitContainer from './ProductsGitContainer'; + +class HomeMainContainer extends Component { + constructor(props){ + super(props); + this.state ={...window.data}; + } + render() { + return ( +
    +
    +

    Welcome to opendesktop

    +
    +
    +
    +
    + + + + + + + + + ); + } +} +export default HomeMainContainer; diff --git a/httpdocs/theme/react/opendesktop-home/Product.js b/httpdocs/theme/react/opendesktop-home/Product.js new file mode 100644 index 000000000..2f099ea84 --- /dev/null +++ b/httpdocs/theme/react/opendesktop-home/Product.js @@ -0,0 +1,48 @@ +import React, { Component } from 'react'; +import TimeAgo from 'react-timeago'; + +class Product extends React.Component { + render(){ + let projectUrl = "/p/"+this.props.product.project_id; + const createdDate = this.props.product.changed_at?this.props.product.changed_at:this.props.product.created_at; + const scoreDisplay=( +
    +
    + {this.props.product.laplace_score + "%"} +
    +
    +
    +
    +
    + ); + + const productInfoDisplay = ( +
    + {this.props.product.title} + {this.props.product.cat_title} + +
    + ); + + + return ( +
    + +
    + {productInfoDisplay} +
    +
    + {scoreDisplay} +
    +
    + ) + } +} + +export default Product; diff --git a/httpdocs/theme/react/opendesktop-home/ProductGit.js b/httpdocs/theme/react/opendesktop-home/ProductGit.js new file mode 100644 index 000000000..736525611 --- /dev/null +++ b/httpdocs/theme/react/opendesktop-home/ProductGit.js @@ -0,0 +1,71 @@ +import React, { Component } from 'react'; +import TimeAgo from 'react-timeago'; +import TextTruncate from 'react-text-truncate'; +class ProductGit extends React.Component { + constructor(props){ + super(props); + this.gitBaseUrl='https://git.opendesktop.org/'; + } + render(){ + + const userDisplay =( + + + + + {this.props.product.namespace.name} + + + + ); + const productInfoDisplay = ( + + ); + + let imageProject; + if(this.props.product.avatar_url) + { + imageProject =( +
    + +
    + ); + }else { + imageProject =( +
    +
    {this.props.product.name.substr(0,1)}
    +
    + ); + } + + return ( +
    + +
    + {productInfoDisplay} +
    +
    + {userDisplay} +
    +
    + ) + } +} + +export default ProductGit; diff --git a/httpdocs/theme/react/opendesktop-home/ProductsContainer.js b/httpdocs/theme/react/opendesktop-home/ProductsContainer.js new file mode 100644 index 000000000..53b6b2a8a --- /dev/null +++ b/httpdocs/theme/react/opendesktop-home/ProductsContainer.js @@ -0,0 +1,26 @@ +import React, { Component } from 'react'; +import Product from './Product'; +class ProductsContainer extends React.Component { + constructor(props){ + super(props); + } + render(){ + let container; + if (this.props.products){ + const products = this.props.products.map((product,index) => ( +
  • + +
  • + )); + container =
      {products}
    + } + return ( +
    +
    {this.props.title}
    + {container} +
    + ) + } +} + +export default ProductsContainer; diff --git a/httpdocs/theme/react/opendesktop-home/ProductsGitContainer.js b/httpdocs/theme/react/opendesktop-home/ProductsGitContainer.js new file mode 100644 index 000000000..b2c6508ad --- /dev/null +++ b/httpdocs/theme/react/opendesktop-home/ProductsGitContainer.js @@ -0,0 +1,52 @@ +import React, { Component } from 'react'; +import ProductGit from './ProductGit'; + +class ProductsGitContainer extends React.Component { + constructor(props){ + super(props); + this.gitUrl='https://git.opendesktop.org/api/v4/projects?order_by=created_at&sort=desc&visibility=public&page=1&per_page=5'; + this.gitUserUrl='https://git.opendesktop.org/api/v4/users?username='; + this.state = {items:[]}; + } + + componentDidMount() { + fetch(this.gitUrl) + .then(response => response.json()) + .then(data => { + data.map((fi,index) => { + let url = this.gitUserUrl+fi.namespace.name; + return fetch(url) + .then(response => response.json()) + .then(data => { + fi.user_avatar_url = data[0].avatar_url; + let items = this.state.items.concat(fi); + this.setState({items:items}); + }) + }); + }); + } + + render(){ + let container; + container =

    git-container

    + if (this.state.items){ + const items = this.state.items.sort(function(a,b){ + return new Date(b.created_at) - new Date(a.created_at); + }); + const products = items.map((product,index) => ( +
  • + +
  • + )); + container =
      {products}
    + } + return ( +
    +
    Git-Projects
    + {container} +
    + ) + } +} + +export default ProductsGitContainer; diff --git a/httpdocs/theme/react/opendesktop-home/RssNewsContainer.js b/httpdocs/theme/react/opendesktop-home/RssNewsContainer.js new file mode 100644 index 000000000..70509fa57 --- /dev/null +++ b/httpdocs/theme/react/opendesktop-home/RssNewsContainer.js @@ -0,0 +1,44 @@ +import React, { Component } from 'react'; +import TimeAgo from 'react-timeago'; +class RssNewsContainer extends Component { + constructor(props){ + super(props); + this.state = {}; + } + + componentDidMount() { + const self = this; + $.getJSON("https://blog.opendesktop.org/?json=1&callback=?", function (res) { + self.setState({items:res.posts}); + }); + } + + render(){ + let feedItemsContainer; + if (this.state.items){ + + const feedItems = this.state.items.slice(0,5).map((fi,index) => ( +
  • + + {fi.title} + + + + + {fi.comment_count} comments + +
  • + )); + + feedItemsContainer =
      {feedItems}
    ; + } + return ( +
    +
    News
    + {feedItemsContainer} +
    + ) + } +} + +export default RssNewsContainer; diff --git a/httpdocs/theme/react/package.json b/httpdocs/theme/react/package.json index 320772c09..3ae81f8a1 100644 --- a/httpdocs/theme/react/package.json +++ b/httpdocs/theme/react/package.json @@ -1,32 +1,33 @@ { "name": "opendesktop-metaheader", "version": "0.0.0", "description": "opendesktop-metaheader Web Components", "license": "AGPL-3.0", "repository": "https://cgit.kde.org/ocs-webserver.git/", "main": "src/metaheader.js", "scripts": { "dev": "webpack --mode development", "build": "webpack --mode production", "watch": "webpack --mode production --watch", "babel": "npx babel src/metaheader --out-file metaheadertest.js" }, "devDependencies": { "@babel/cli": "^7.2.3", "@babel/core": "^7.3.4", "@babel/polyfill": "^7.2.5", "@babel/preset-env": "^7.3.4", "@babel/preset-react": "^7.0.0", "@webcomponents/custom-elements": "*", "axios": "^0.18.0", "babel-loader": "*", "react": "*", "react-dom": "*", "react-timeago": "^4.4.0", "webpack": "*", "webpack-cli": "*" }, "dependencies": { - "@material-ui/core": "^3.9.2" + "@material-ui/core": "^3.9.2", + "react-text-truncate": "^0.14.0" } }