Skip to main content

Hi

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE html>
<html b:css='false' b:defaultwidgetversion='2' b:layoutsVersion='3' b:responsive='true' b:templateUrl='job_aggregation_template.xml' b:templateVersion='1.0.0' expr:dir='data:blog.languageDirection' expr:lang='data:blog.locale' xmlns='http://www.w3.org/1999/xhtml' xmlns:b='http://www.google.com/2005/gml/b' xmlns:data='http://www.google.com/2005/gml/data' xmlns:expr='http://www.google.com/2005/gml/expr'>
  <head>
    <meta content='width=device-width, initial-scale=1' name='viewport'/>
    <title><data:view.title.escaped/></title>
   
    <!-- SEO Meta Tags -->
    <meta expr:content='data:blog.title + " - Job Portal"' property='og:title'/>
    <meta content='Find the latest job opportunities across technology, healthcare, finance, and education sectors.' name='description'/>
    <meta content='jobs, career, employment, hiring, job portal, job search' name='keywords'/>
   
    <!-- Font Awesome -->
    <link href='https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css' rel='stylesheet'/>
   
    <b:include data='blog' name='all-head-content'/>

    <b:skin><![CDATA[
    /* Variable definitions and basic styling */
    body {
      font-family: 'Segoe UI', 'Inter', 'Roboto', sans-serif;
      background-color: #f8fafc;
      color: #334155;
      line-height: 1.6;
      margin: 0;
      padding: 0;
    }
   
    a {
      color: #2563eb;
      text-decoration: none;
    }
   
    a:hover {
      color: #1e40af;
    }
   
    .container {
      max-width: 1200px;
      margin: 0 auto;
      padding: 0 15px;
    }
    ]]></b:skin>

    <style>
      /* Header Styling */
      .header {
        background-color: #ffffff;
        box-shadow: 0 2px 10px rgba(0,0,0,0.1);
        padding: 1rem 0;
        position: sticky;
        top: 0;
        z-index: 100;
      }
     
      .header-container {
        display: flex;
        justify-content: space-between;
        align-items: center;
      }
     
      .logo {
        font-size: 1.5rem;
        font-weight: bold;
        color: #2563eb;
      }
     
      .nav-menu {
        display: flex;
        list-style: none;
        margin: 0;
        padding: 0;
      }
     
      .nav-menu li {
        margin-left: 1.5rem;
      }
     
      .nav-menu a {
        color: #334155;
        font-weight: 500;
        transition: color 0.3s ease;
      }
     
      .nav-menu a:hover {
        color: #2563eb;
      }
     
      /* Main content styling */
      .main-content {
        padding: 2rem 0;
      }

      /* Search and Filter styles */
      .search-filter-container {
        margin-bottom: 2rem;
      }

      .search-container {
        display: flex;
        margin-bottom: 1rem;
      }

      #job-search {
        flex-grow: 1;
        padding: 0.5rem;
        border: 1px solid #e2e8f0;
        border-radius: 4px 0 0 4px;
        font-size: 1rem;
      }

      .search-button {
        background-color: #2563eb;
        color: white;
        border: none;
        padding: 0.5rem 1rem;
        border-radius: 0 4px 4px 0;
        cursor: pointer;
      }

      .filter-container {
        display: flex;
        flex-wrap: wrap;
        gap: 0.5rem;
      }

      .filter-button {
        background-color: #e2e8f0;
        border: none;
        padding: 0.5rem 1rem;
        border-radius: 4px;
        cursor: pointer;
        transition: background-color 0.3s ease;
      }

      .filter-button.active {
        background-color: #2563eb;
        color: white;
      }

      /* Job Grid */
      .job-grid {
        display: grid;
        grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
        gap: 1.5rem;
      }

      .job-item {
        background-color: white;
        border-radius: 8px;
        box-shadow: 0 2px 4px rgba(0,0,0,0.1);
        padding: 1.5rem;
        transition: transform 0.3s ease, box-shadow 0.3s ease;
      }

      .job-item:hover {
        transform: translateY(-5px);
        box-shadow: 0 10px 20px rgba(0,0,0,0.1);
      }

      .job-item h2 {
        margin-top: 0;
        margin-bottom: 0.5rem;
        font-size: 1.25rem;
      }

      .job-snippet {
        color: #4b5563;
        margin-bottom: 1rem;
      }

      .job-labels a {
        display: inline-block;
        background-color: #e2e8f0;
        color: #4b5563;
        padding: 0.25rem 0.5rem;
        border-radius: 4px;
        font-size: 0.875rem;
        margin-right: 0.5rem;
        margin-bottom: 0.5rem;
        transition: background-color 0.2s ease;
      }
     
      .job-labels a:hover {
        background-color: #d1d5db;
      }

      /* Empty State */
      .empty-state {
        text-align: center;
        padding: 3rem 1rem;
        background-color: white;
        border-radius: 8px;
        box-shadow: 0 2px 4px rgba(0,0,0,0.05);
        grid-column: 1 / -1;
      }

      .empty-state i {
        color: #94a3b8;
        margin-bottom: 1rem;
      }

      .empty-state h3 {
        margin-top: 0;
        color: #334155;
      }

      .empty-state p {
        color: #64748b;
      }

      /* No Jobs Found */
      .no-jobs-found {
        margin-bottom: 2rem;
      }

      /* Footer Styling */
      .footer {
        background-color: #1e293b;
        color: #e2e8f0;
        padding: 3rem 0 1rem;
        margin-top: 3rem;
      }

      .footer-content {
        display: flex;
        flex-wrap: wrap;
        justify-content: space-between;
        margin-bottom: 2rem;
      }

      .footer-logo h2 {
        margin-top: 0;
        margin-bottom: 0.5rem;
        color: white;
      }

      .footer-logo p {
        color: #94a3b8;
      }

      .footer-links {
        display: flex;
        flex-wrap: wrap;
        gap: 3rem;
      }

      .footer-section h3 {
        color: white;
        margin-top: 0;
        margin-bottom: 1rem;
        font-size: 1.1rem;
      }

      .footer-section ul {
        list-style: none;
        padding: 0;
        margin: 0;
      }

      .footer-section li {
        margin-bottom: 0.5rem;
      }

      .footer-section a {
        color: #94a3b8;
        transition: color 0.2s ease;
      }

      .footer-section a:hover {
        color: white;
      }

      .copyright {
        border-top: 1px solid #334155;
        padding-top: 1rem;
        text-align: center;
        color: #64748b;
        font-size: 0.875rem;
      }

      @media (max-width: 768px) {
        .footer-content {
          flex-direction: column;
        }
       
        .footer-logo {
          margin-bottom: 2rem;
        }
       
        .footer-links {
          gap: 1.5rem;
        }
      }
    </style>
  </head>
 
  <body>
    <!-- Header -->
    <header class='header'>
      <div class='container header-container'>
        <a class='logo' href='/'>Job Portal</a>
        <nav>
          <ul class='nav-menu'>
            <li><a href='/'>Home</a></li>
            <li><a href='/search'>Search Jobs</a></li>
            <li><a href='/about'>About</a></li>
            <li><a href='/contact'>Contact</a></li>
          </ul>
        </nav>
      </div>
    </header>

    <!-- Main content -->
    <main class='main-content'>
      <div class='container'>
        <b:section id='main' showaddelement='false'>
          <b:widget id='Blog1' locked='true' title='Blog Posts' type='Blog' version='2'>
            <b:widget-settings>
              <b:widget-setting name='showDateHeader'>false</b:widget-setting>
              <b:widget-setting name='style.textcolor'>#000000</b:widget-setting>
              <b:widget-setting name='showShareButtons'>false</b:widget-setting>
              <b:widget-setting name='showCommentLink'>false</b:widget-setting>
              <b:widget-setting name='style.urlcolor'>#008000</b:widget-setting>
              <b:widget-setting name='showAuthor'>false</b:widget-setting>
              <b:widget-setting name='style.linkcolor'>#0000ff</b:widget-setting>
              <b:widget-setting name='style.unittype'>TextAndImage</b:widget-setting>
              <b:widget-setting name='style.bgcolor'>#ffffff</b:widget-setting>
              <b:widget-setting name='showAuthorProfile'>false</b:widget-setting>
              <b:widget-setting name='style.layout'>1x1</b:widget-setting>
              <b:widget-setting name='showLabels'>true</b:widget-setting>
              <b:widget-setting name='showLocation'>false</b:widget-setting>
              <b:widget-setting name='showTimestamp'>false</b:widget-setting>
              <b:widget-setting name='postsPerAd'>1</b:widget-setting>
              <b:widget-setting name='showBacklinks'>false</b:widget-setting>
              <b:widget-setting name='style.bordercolor'>#ffffff</b:widget-setting>
              <b:widget-setting name='showInlineAds'>false</b:widget-setting>
              <b:widget-setting name='showReactions'>false</b:widget-setting>
            </b:widget-settings>
            <b:includable id='main'>

              <!-- Search and Filter Section (moved outside grid) -->
              <div class='search-filter-container'>
                <div class='search-container'>
                  <input id='job-search' placeholder='Search for jobs...' type='text'/>
                  <button class='search-button'><i class='fas fa-search'></i></button>
                </div>
                <div class='filter-container'>
                  <button class='filter-button active' data-category='all'>All Jobs</button>
                  <button class='filter-button' data-category='technology'>Technology</button>
                  <button class='filter-button' data-category='healthcare'>Healthcare</button>
                  <button class='filter-button' data-category='finance'>Finance</button>
                  <button class='filter-button' data-category='education'>Education</button>
                </div>
              </div>
             
              <!-- Debug Information (temporary - remove after testing) -->
              <div style='background: #f0f8ff; padding: 10px; margin: 10px 0; border: 1px solid #ccc; border-radius: 4px;'>
                <p><strong>Debug Info:</strong></p>
                <p>Posts empty: <data:posts.empty/></p>
                <p>Number of posts: <data:posts.size/></p>
                <b:if cond='!data:posts.empty'>
                  <p>First post title: <b:eval expr='data:posts.first.title'/></p>
                </b:if>
              </div>
             
              <!-- No jobs found message (initially hidden) -->
              <div class='no-jobs-found' style='display: none;'>
                <div class='empty-state'>
                  <i class='fas fa-search fa-4x'></i>
                  <h3>No jobs found</h3>
                  <p>Try adjusting your search or filter criteria</p>
                </div>
              </div>
             
              <!-- Jobs Grid -->
              <div class='job-grid'>
                <b:if cond='data:posts.empty'>
                  <div class='empty-state'>
                    <i class='fas fa-briefcase fa-4x'></i>
                    <h3>No jobs available at the moment</h3>
                    <p>Please check back later for new opportunities</p>
                  </div>
                <b:else/>
                  <b:loop values='data:posts' var='post'>
                    <div class='job-item' expr:data-categories='data:post.labels map (label => label.name) join ","'>
                      <h2><a expr:href='data:post.url'><data:post.title/></a></h2>
                      <div class='job-snippet'>
                        <b:if cond='data:post.snippets.short'>
                          <data:post.snippets.short/>
                        <b:else/>
                          <data:post.body/>
                        </b:if>
                      </div>
                      <b:if cond='data:post.labels'>
                        <div class='job-labels'>
                          <b:loop values='data:post.labels' var='label'>
                            <a expr:href='data:label.url'><data:label.name/></a>
                          </b:loop>
                        </div>
                      </b:if>
                    </div>
                  </b:loop>
                </b:if>
              </div>
             
              <!-- Pagination -->
              <b:include name='nextprev'/>
            </b:includable>
           
            <!-- Post includable (required for individual post display) -->
            <b:includable id='post' var='post'>
              <div class='job-item' expr:data-categories='data:post.labels map (label => label.name) join ","'>
                <h2><a expr:href='data:post.url'><data:post.title/></a></h2>
                <div class='job-snippet'>
                  <b:if cond='data:post.snippets.short'>
                    <data:post.snippets.short/>
                  <b:else/>
                    <data:post.body/>
                  </b:if>
                </div>
                <b:if cond='data:post.labels'>
                  <div class='job-labels'>
                    <b:loop values='data:post.labels' var='label'>
                      <a expr:href='data:label.url'><data:label.name/></a>
                    </b:loop>
                  </div>
                </b:if>
              </div>
            </b:includable>
           
            <!-- Post Quick Edit includable -->
            <b:includable id='postQuickEdit' var='post'>
              <b:if cond='data:post.editUrl'>
                <span expr:class='&quot;item-control &quot; + data:post.adminClass'>
                  <a expr:href='data:post.editUrl' expr:title='data:top.editPostMsg'>
                    <img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/>
                  </a>
                </span>
              </b:if>
            </b:includable>
           
            <!-- Comments includable -->
            <b:includable id='comments' var='post'>
              <!-- Comments are disabled in widget settings, but includable is required -->
            </b:includable>
           
            <!-- Backlinks includable -->
            <b:includable id='backlinks' var='post'>
              <!-- Backlinks are disabled in widget settings, but includable is required -->
            </b:includable>
           
            <!-- Post Footer includable -->
            <b:includable id='postFooter' var='post'>
              <!-- Post footer content if needed -->
            </b:includable>
           
          </b:widget>
        </b:section>
      </div>
    </main>

      <!-- Footer Section -->
      <footer class='footer'>
        <div class='container'>
          <div class='footer-content'>
            <div class='footer-logo'>
              <h2>Job Portal</h2>
              <p>Find your dream job today</p>
            </div>
            <div class='footer-links'>
              <div class='footer-section'>
                <h3>Quick Links</h3>
                <ul>
                  <li><a href='/'>Home</a></li>
                  <li><a href='/search'>Search Jobs</a></li>
                  <li><a href='/about'>About</a></li>
                  <li><a href='/contact'>Contact</a></li>
                </ul>
              </div>
              <div class='footer-section'>
                <h3>Job Categories</h3>
                <ul>
                  <li><a href='/search/label/technology'>Technology</a></li>
                  <li><a href='/search/label/healthcare'>Healthcare</a></li>
                  <li><a href='/search/label/finance'>Finance</a></li>
                  <li><a href='/search/label/education'>Education</a></li>
                </ul>
              </div>
            </div>
          </div>
          <div class='copyright'>
            <p>© <span id='current-year'></span> Job Portal. All rights reserved.</p>
          </div>
        </div>
      </footer>

      <!-- JavaScript for filters and search -->
      <script>
      //<![CDATA[
      document.addEventListener('DOMContentLoaded', function() {
        // Set current year
        document.getElementById('current-year').textContent = new Date().getFullYear();
       
        // DOM elements
        const jobItems = document.querySelectorAll('.job-item');
        const filterButtons = document.querySelectorAll('.filter-button');
        const searchInput = document.getElementById('job-search');
        const noJobsFound = document.querySelector('.no-jobs-found');
     
        // Filter functionality
        filterButtons.forEach(button => {
          button.addEventListener('click', function() {
            // Update active button
            filterButtons.forEach(btn => btn.classList.remove('active'));
            this.classList.add('active');
         
            const category = this.getAttribute('data-category');
         
            // Filter jobs
            let foundJobs = 0;
         
            jobItems.forEach(job => {
              // If "all" is selected or job has the selected category
              if (category === 'all') {
                job.style.display = 'block';
                foundJobs++;
              } else {
                const categories = job.getAttribute('data-categories').toLowerCase();
                if (categories.includes(category.toLowerCase())) {
                  job.style.display = 'block';
                  foundJobs++;
                } else {
                  job.style.display = 'none';
                }
              }
            });
         
            // Show/hide "no jobs found" message
            noJobsFound.style.display = foundJobs > 0 ? 'none' : 'block';
         
            // Apply search filter as well (if there's text in the search box)
            if (searchInput.value.trim() !== '') {
              filterBySearchTerm(searchInput.value.trim());
            }
          });
        });
     
        // Search functionality
        searchInput.addEventListener('keyup', function() {
          filterBySearchTerm(this.value.trim());
        });
     
        function filterBySearchTerm(term) {
          if (term === '') {
            // If search is cleared, reapply only category filter
            const activeCategory = document.querySelector('.filter-button.active').getAttribute('data-category');
            filterButtons.forEach(btn => {
              if (btn.getAttribute('data-category') === activeCategory) {
                btn.click();
              }
            });
            return;
          }
       
          // Get current active category
          const activeCategory = document.querySelector('.filter-button.active').getAttribute('data-category');
       
          let foundJobs = 0;
       
          // Loop through all job items
          jobItems.forEach(job => {
            // First check if the job should be visible based on category
            let visibleByCategory = (activeCategory === 'all') ||
                                  job.getAttribute('data-categories').toLowerCase().includes(activeCategory.toLowerCase());
         
            // If visible by category, then apply search filter
            if (visibleByCategory) {
              const title = job.querySelector('h2').textContent.toLowerCase();
              const snippet = job.querySelector('.job-snippet') ? job.querySelector('.job-snippet').textContent.toLowerCase() : '';
           
              if (title.includes(term.toLowerCase()) || snippet.includes(term.toLowerCase())) {
                job.style.display = 'block';
                foundJobs++;
              } else {
                job.style.display = 'none';
              }
            } else {
              job.style.display = 'none';
            }
          });
       
          // Show/hide "no jobs found" message
          noJobsFound.style.display = foundJobs > 0 ? 'none' : 'block';
        }
      });
      //]]>
      </script>
      <script>
      //<![CDATA[
      // Your JavaScript code here
      //]]>
      </script>
    </body>
</html>

Comments

Popular posts from this blog

JOB 1

Company: TechInnovate Inc. Location: New York, NY (Hybrid - 2 days in office) Type: Full-time Salary: $120,000 - $150,000 per year Job Description TechInnovate Inc. is seeking an experienced Full Stack Developer to join our growing team. You will be responsible for developing and maintaining web applications, collaborating with cross-functional teams, and implementing new features and functionality. As a Senior Full Stack Developer, you will work with both front-end and back-end technologies to build scalable and efficient solutions for our clients in the finance industry. Requirements 5+ years of experience in full stack development Proficient in JavaScript, TypeScript, React, and Node.js Experience with RESTful APIs and microservices architecture Familiarity with cloud platforms (AWS, Azure, or GCP) Knowledge of database systems (SQL and NoSQL) Strong problem-solving skills and attention to detail Bachelor...